0

私はルビーに不慣れで、それがどのように機能するかについてもっと知りたいです。そのため、Railsをすばやく展開するために、仮想マシンでサーバー構成をテストしてきました。

Ubuntu 10.04環境でRVM、Ruby、Rails、Git、Gitolite、PostgreSQL、Thin、Nginxを実行しています。

今、私はすべてを結びつけたいと思います。しかし、展開プロセスで行き詰まりました。

プロジェクトをGitトランクにコミットした後、デプロイアクションをフックして、アプリケーションを正しい場所に配置し、本番環境に設定し、バンドルをインストールし、移行を行い、Nginxを再起動します。

しかし、私はそれがどのように機能するかについての簡単な参照を見つけることができません。私がグーグルで見つけたのは、乗客、キャピストラーノなどを使用するためのガイドだけです。herokuと同様に、git commitアクションでデプロイをトリガーしたいのですが、100%サーバー側でそれを行うための最良のツールは何でしょうか?

シェルスクリプトを作成するのはどうですか?プロジェクトを手動でデプロイするにはどうすればよいですか?手順は何ですか?Railsデプロイメントの詳細をすべて知っているとは限らないガイドはありますか?

ありがとう!

4

2 に答える 2

0

あなたがおそらく探していると思うのはgit post-receiveフックです(チュートリアルはここにあります:http://toroid.org/ams/git-website-howto)。

このフックによって、例えばトリガーする必要があります。必要なすべてのステップを実行する必要があるシェルスクリプト-次のとおりです。

  1. gitリポジトリからHEADコミットをチェックアウトします(git checkout -f、リンクされたチュートリアルを参照)
  2. 走るbundle install
  3. 実行bundle exec rake db:migrate-これは、DBがすでに作成されていることを前提としています
  4. シンサーバークラスターを再起動/起動します(この操作を使用するパッセンジャーに似ている場合は、restart.txtファイルを作成するだけです)-その前にリバースプロキシとしてnginxがあると思いますか?

これは長編短編です。それはもう少し複雑です、例えば。アセットパイプライン(rails> = 3.1)を使用する場合は、アセットなどをプリコンパイルする必要があります。ただし、上記は出発点として適しています。

于 2012-10-09T12:06:42.720 に答える
0

さて、私はそれをほぼ完全に操作可能にすることができました。

これまで追跡できた主なアクションは次のとおりです。

  • ユーザーはトランクにプッシュします。スクリプトを使用して次のステップをトリガーするには、gitフックを使用する必要があります。

スクリプトは次のことを行う必要があります。

  • プロジェクトを/var/wwwフォルダーに複製します。
  • 'thin'gemをGemfileに挿入します。
  • アプリケーションフォルダで「bundle」コマンドを実行します。
  • アプリケーションフォルダー内のアセットをプリコンパイルします。
  • データベースを移行します。
  • nginxとthinを停止します。
  • thinとnginxを再起動します。

アプリケーションが新しい場合は、次のことも行う必要があります。

  • データベース情報に一致する新しいユーザーを作成します。
  • 本番データベースを作成します。
  • 新しいnginx構成ファイルを挿入します。
  • 次のように、アプリケーションフォルダーからシン構成をエクスポートします。

thin config -C /etc/thin/app.yml -c /var/www/app --servers 1 -e production

アクションのシーケンスは多かれ少なかれこれです:

$ bundle package
$ bundle install --deployment
$ RAILS_ENV=production rake db:migrate
$ rake assets:precompile
$ thin start -C /etc/thin/app.yml

これが今の基本です。100%動作させてから、インターネットにガイドを投稿したいと思います。

アップデート

私がやると言ったガイド:

https://github.com/sentient06/RDH/wiki

于 2012-11-02T15:35:41.800 に答える