Capistranoは複数のサーバーへの展開をサポートしていると聞きましたが、実用的な設定方法が見つかりませんでした。複数のサーバーとは、実稼働環境で同じアプリケーションを実行しているサーバーを意味します。それが現在使用しているものであれば、いつでも5台または10台のサーバーに展開したいと思います。
ありがとうございました。
Capistranoは複数のサーバーへの展開をサポートしていると聞きましたが、実用的な設定方法が見つかりませんでした。複数のサーバーとは、実稼働環境で同じアプリケーションを実行しているサーバーを意味します。それが現在使用しているものであれば、いつでも5台または10台のサーバーに展開したいと思います。
ありがとうございました。
複数のサーバーを使用することは、単に手作業で行うのではなく、capistranoを使用する主な理由の1つです。
deploy.rbは、どのサーバーがどの役割に属するかを設定することによって実行される、どのサーバーで実行する必要があるアクションを定義する必要があるだけです。独自のロールを作成できますが、組み込みのcapistranoレシピでは、次の3つのロールを定義する必要があります。
これら3つが同義語であるのは珍しいことではありません。すべてapache+passengerを実行している同一のサーバーが多数ある場合、それらはすべてアプリサーバーとWebサーバーです。それらの1つにdbロールを与える必要があります。
deploy.rbファイルでロールを定義します。最も単純な場合、これはIPアドレスまたはホスト名のリストです。
role :app, [192.168.1.1,192.168.1.2]
ブロックにすることもできます。たとえば、ec2にデプロイする場合、デプロイ先のサーバーのリストを取得するapi呼び出しを挿入できます。私は通常、サーバーにタグを割り当てることによってこれを行います。
role :app do
ec2.instances.tagged('app').map(&:ip_address)
end
そのロールをappタグを使用してec2インスタンスにマップする(capistranoはこの情報をキャッシュし、ブロックを1回だけ実行します)
Rails4では別の構文を使用する必要がありました。
role :app, %w{s01.app.com s02.app.com}
role :web, %w{s01.web.com s02.web.com}