続オレオレ capistrano TIPS: db:create をリモートから実行する(再)/メンテナンス画面を出す

前回に引き続き capistrano TIPS です。

データベースを初期化する

前回書いたタスクを簡単に利用できるよう、パッケージ化しました。
capistrano-rails-dbinit というパッケージです。

インストール

さっくり gem コマンドで入れます。

$ gem install capistrano-rails-dbinit

capistrano で使うために config/deploy.rb に書き足します。

require 'capistrano-rails-dbinit'

おしまいです。

使ってみる

capistrano-rails-dbinit は deploy:db:init というタスクを追加します。
ですので、初回デプロイの際に以下のコマンドを実行するだけです。

$ cap deploy:setup
$ vi shared/config/database.yml
$ cap deploy:db:init
$ cap deploy:cold

メンテナンス画面を出す

デプロイの際、DB スキーマの変更やその他時間のかかる処理をするために、サービスを停止してメンテナンス画面を出したくなる時があります。
そんな時は capistrano-maintenance を利用します。
以前は capistrano 本体に含まれていたコードが、紆余曲折を得て別モジュールとしてリリースされたものです。

インストール

いつもどおり gem で入れます。

$ gem install capistrano-maintenance

あとは config/deploy.rb に書き足すだけです。

require 'capistrano/maintenance'

使ってみる

capistrano-maintenance は deploy:web:disable と deploy:web:enable というタスクを追加します。

このタスクはメンテナンス用の HTML ファイルを生成/削除するようになっているので、
Web サーバでこのファイルが存在する場合はメンテナンス画面を表示するように設定する必要があります。

if (-f $document_root/system/maintenance.html) {
  return 503;
}
error_page 503 @maintenance;
location @maintenance {
  rewrite  ^(.*)$  /system/maintenance.html last;
  break;
}

また、メンテナンス画面をカスタマイズする際は config/templates/maintenance.html.erb にファイルを置くと
画面を置き換えることができます。


あとは、メンテナンスモードに変更する際に

$ cap deploy:web:disable

とし、メンテナンスが終わったタイミングで

$ cap deploy:web:enable

を実行するだけで ok です。