1

私のローカルホストで見栄えの良いRailsアプリがあります。今、私はそれを複数のサーバー(1つのロードバランサーと正確には2つのアプリケーションサーバー、将来的に増加する可能性があります)にデプロイしたいと思っていますが、どういうわけか迷っています。自分でWebを導入するのは初めてなので、知識不足で申し訳ありません。

すべてのアプリケーション サーバーでまったく同じコードを実行したい。また、新しいコンテンツを作成するときは、新しいコンテンツを各サーバーのデータベース インスタンス (MySQL) に保存したいと考えています。そのため、メンテナンスと更新のために 1 つのサーバーを停止したとき、サーバーの残りの部分はまったく同じコンテンツでユーザーにサービスを提供できました。カピストラーノがこれに役立つと読んだことがありますが、どういうわけか、これを行う方法を学ぶのに迷子になりました。では、ここからどのように進めればよいでしょうか。カピストラーノのレシピはどのように見えるべきですか? また、レールで database.yml を調整する必要がありますか?

助けてくれてどうもありがとう。

4

1 に答える 1

3

ロールを使用して、同じアプリケーションを複数のサーバーにデプロイできます。多段階拡張機能を使用していると仮定して、次のロールを定義しますproduction.rb

server1 = 'appserver1.tld'
server2 = 'appserver2.tld'
server3 = 'webserver1.tld'

role :app, server1, server2
role :web, server3

:webWeb サーバーは、役割によって指定されたサーバーで実行されます。

アプリ層は、:app役割によって指定されたサーバーで実行されます。

デプロイ中に移行またはその他の DB 操作を実行する場合は、:dbロールの下にサーバーも指定する必要があります。例えば:

role :db, 'dbserver.tld', :primary => true

複数の DB サーバーを使用できますが、1 つをプライマリ サーバーとして指定すると、capistrano はそのサーバーでのみ DB 操作を実行します。

では、deploy.rb特定のロールに対してのみ実行されるタスクを作成することもできます。例えば:

task :restart, :roles => :app, :except => { :no_release => true } do
    run "touch #{current_path}/tmp/restart.txt"
end

上記の例で:except => { :no_release => true }は、デプロイ先のサーバーに少なくとも 1 つのリリースが存在する場合にのみ実行されることを意味します。

この wiki 記事はさらに役立つかもしれません。

于 2013-09-25T10:48:51.037 に答える