読者です 読者をやめる 読者になる 読者になる

capistranoでデプロイした後に作業は絶対したくない!

Ruby Rails

capistranoは便利なのですが、さすがに全部やってくれるわけではないので、
私の環境(sarge+apache2+mod_fcgid)では

以上の3ファイルが本番と開発用では異なります。
また、apache用の公開ディレクトリも用意する必要があります。
そのため、taskを自作することにしました。
capistranoをインストールし、deploy.rbを作っておきます。
以下をdeploy.rbに追加しておきます。

desc "Deploy after"
task :deploy_after, :roles => [:app, :db, :web] do
  public_dir="/var/www/schedule"
  run "rm -fr #{public_dir}"
  run "cp -fr #{current_path}/public #{public_dir}"
  run "cp #{public_dir}/.htaccess.production #{public_dir}/.htaccess"
  run "cp #{public_dir}/dispatch.fcgi.production #{public_dir}/dispatch.fcgi"
  run "cp #{current_path}/config/environment.rb.production #{current_path}/confi
g/environment.rb"
end

適切に.htaccess.production、dispatch.fcgi.production、environment.rb.productionを
用意して本番用に書き換えます。environment.rb.productionはRAILS_ENVをproductionに
するためだけに用意したものです。
順番に解説するとapacheの公開用ディレクトリをセットし、
公開用ディレクトリを一旦消します。
公開用ディレクトリをコピーします。
3つのファイルを上書きでコピーします。
これだけで終わりです。

rake remote:exec ACTION=deploy_after

これでOKです。
実際は

rake deploy
rake remote:exec ACTION=deploy_after
rake remote:migrate

ですね。一番最初は当然rake remote:setupも必要です。