Capistranoでアプリケーションのデプロイ作業を効率化

沖津貴智(moonlinxチーフエンジニア)
2009-07-06 20:12:01
  • このエントリーをはてなブックマークに追加

 次に、デプロイ時にRailsアプリケーションを再起動するタスクを登録します。

namespace :deploy do
 #deploy:restartタスク
 task :restart, :roles => :app do
  send(:run, "touch #{current_path}/tmp/restart.txt")
 end

 #deploy:startタスク
 task :start, :roles => :app do
  send(run_method, "sudo /etc/init.d/apache2 restart")
 end
end

 このタスクですが、Passenger向けの起動、再起動タスクになります。Passengerで動作しているRailsアプリケーションを再起動する方法は2種類あり、1つはそのままApacheを再起動する方法で、もう1つはtmp/restart.txtを更新する方法です。

 Railsアプリケーションのtmpディレクトリに空のrestart.txtを配置しておくことで、Railsアプリケーションの更新を通知することができます。この場合、Passengerが自動的にRailsアプリケーションをリロードするため、Apacheを停止せずに更新が可能になります。moonlinxでは、tmp/restart.txtで運用しています。

 これで最低限の設定は完了です。

 この状態で、subversionなどにRailsアプリケーションと一緒にコミットしておきましょう。また、これまで設定したconfig/deploy.rbを以下に載せておきます。

# config/deploy.rb:
set :application, "moonlinx"
set :repository, "svn+ssh://svn.moonlinx.jp/svn/moonlinx"
set :scm, :subversion

role :web, "moonlinx.jp"
role :app, "moonlinx.jp"
role :db, "moonlinx.jp", :primary => true

set :deploy_to, "/home/moonlinx/www/#{application}"

namespace :deploy do
 #deploy:restartタスク
 task :restart, :roles => :app do
  send(:run, "touch #{current_path}/tmp/restart.txt")
 end

 #deploy:startタスク
 task :start, :roles => :app do
  send(run_method, "sudo /etc/init.d/apache2 start")
 end
end

デプロイ前の初期設定

 Capistranoでデプロイを行う場合、まず最初にCapistranoで必要となるディレクトリをデプロイ先のサーバに作成する必要があります。これはRailsアプリケーションのカレントディレクトリで、以下のコマンドを実行する事で自動的に実行されます。

$ cd moonlinx
$ cap deploy:setup

 deploy:setupを実行すると、デプロイ先のサーバへSSH接続が実行され、以下のディレクトリが作成されます。

/home/okitsu/www/moonlinx/
/home/okitsu/www/moonlinx/releases
/home/okitsu/www/moonlinx/shared
/home/okitsu/www/moonlinx/shared/log
/home/okitsu/www/moonlinx/shared/pids
/home/okitsu/www/moonlinx/shared/system

 Capistranoでは、デプロイを行うたびに世代管理を自動的に行ってくれます。その管理ディレクトリが先ほど作られたreleasesディレクトリになります。ここに、過去にデプロイしたアプリケーションがバックアップされていきます。そのため、deploy:rollbackタスクなどを使うことで、簡単に巻き戻しも可能になるのです。

 もうひとつ重要なディレクトリがshared/systemディレクトリです。このディレクトリは各世代で共通して利用するリソースを格納するためのディレクトリになります。例えば、ユーザーからアップロードされるファイルを管理するような場面で利用できます。

 このディレクトリは、Railsアプリケーションのpublic/systemディレクトリから自動的にシンボリックリンクが張られるようになるため、Capistranoを利用したアプリケーションを作成する場合、このsystemディレクトリを意識して開発する必要がありますので、その点ご注意ください(このpublic/systemディレクトリもデプロイ時に自動的に作成されます)。

 ここまでうまくいったら、あとはデプロイを行うだけです。

このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]