web-dev-qa-db-ja.com

Capistranoを使用して複数のサーバーにRailsアプリをデプロイする-ベストプラクティス

Railsアプリケーションを3台のサーバー(machine1.com、machine2.com、machine3.com)にデプロイする必要があります。すべてのマシンに一度にデプロイできるようにしたい誰かがスケルトンのCapistrano設定ファイル/レシピで私を助けてくれますか?それはすべてdeploy.rbにあるべきですか、それともmachine1.rbなどでそれを分解するべきですか?

Capistranoがコマンドライン引数を取得するように正しい方向に進んでいると思いましたが、名前空間内でロールを設定しようとしたときにそれが窒息しました。 'hosts = 1,2,3'を引数として渡し、コマンドを分割して各doホストに移動した後でrole:app/web/dbを "machine#{Host} .com"に設定します。 | {} ...

とにかく、4つの異なるdeploy.rbファイルを作成し、毎回cap:deployを実行する前に名前を変更する以外は、困惑しています。次のことができるようにしたいと思います。

cap deploy:machine1:latest_version_from_svn
cap deploy:all_machines:latest:version_from_svn

すべてが名前空間で分割されたdeploy.rbにあるべきか、それが複数の* deploy **。rbファイルに分割されるべきかがわからない。

42
Louise

すべて1つのファイルに入れてください。次に例を示します。

set :application, "my-app"
set :repository,  "[email protected]:my-app.git"
set :keep_releases, 5
set :deploy_via, :remote_cache
set :git_enable_submodules, true
set :scm, :git
set :user, 'your-user-here'

set :deploy_to, "/var/www/staging.mydomain.com"
set :branch, 'staging'
set :Rails_env, 'staging'

role :web, "machine1.mydomain.com", "machine2.mydomain.com", "machine3.mydomain.com"
role :app, "machine1.mydomain.com", "machine2.mydomain.com", "machine3.mydomain.com"
role :db, "db.mydomain.com"
# ...

1つのdbサーバーのみが指定されていることがわかります。これは、移行が実行されるマシンです。データベースが1つしかない場合(その質問に対する回答がYESである確率は99.9%)、必ず1つだけを指定してください。

71
Tim Harper

少し異なる構文を使用する必要がありました。

role :app, %w{s01.foobaz.com s02.foobaz.com}, user: 'deployer'
role :web, %w{s01.foobaz.com s02.foobaz.com}, user: 'deployer'
4
max kaplan