CAPISTRANO 2.0 その3
まずproxyの設定ですが、これはすでに櫻井の日記の方で書かれていた(通常は、、のところです)ので、省略させていただきます。要は、apache 2.2の機能であるbalancerを利用しています。
次に、WEBサーバでメンテナンス画面を出す方法を紹介させていただきます。こちらは、deploy.rbファイルの、namespaceで:deploy , :webの下にある、:disableタスクと:enableタスクを修正して、自分の環境に合わせます。私の場合は
としています。(\で区切られている部分は、実際は一行です。また、reasonやdeadlineは実際には使っていませんが、残しています)task :disable, :roles => :web, \
:except => { :no_release => true } do
require 'erb'
on_rollback { \
run "rm #{shared_path}/system/maintenance.html" }reason = ENV['REASON']
deadline = ENV['UNTIL']template = File.read(File.join(File.dirname(__FILE__), \
"..", "maintenance.rhtml"))
result = ERB.new(template).result(binding)put result, "#{shared_path}/system/maintenance.html", \
:mode => 0644end
task :enable, :roles => :web, \
:except => { :no_release => true } do
run "rm #{shared_path}/system/maintenance.html"end
こうすることで、railsディレクトリ(プロジェクトのソースディレクトリ)にmaintenance.htmlファイルを置いておけば、それがメインテナンス画面となり、次で述べるAPACHEの設定をすることで、
cap deploy:web:disableを実行するとメインテナンスモードとなって表示され、
cap deploy:web:enableを実行すると表示されなくなります。
そして、APACHEの設定ですが、これはhttpd.confなどで、document_rootの設定を本番のrailsのsharedディレクトリに設定した上で、
と設定しておきます。RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}/system/maintenance.html -f
RewriteCond %{SCRIPT_FILENAME} !maintenance.html
RewriteRule ^.*$ /system/maintenance.html [L]
(sharedディレクトリに設定したのは、上のdeploy.rbでの設定とあわせるためです)
こうすれば、無事にメインテナンス画面が表示されるようになります。
簡単に説明すると、maintenance.htmlファイルが存在する場合は、すべてのアクセスに対してmaintenance.htmlを表示するようにしているだけです。このままだと、メインテナンス画面に画像をつけたりできないので、そこらへんはRewriteの条件を追加して行います。
