酒と泪とRubyとRailsと

Ruby on Rails と Objective-C は酒の肴です!

Turnout Railsでサクッとメンテナンス画面を表示

Capistranoでのデプロイ中やメンテナンス中に一時的にWeb画面が表示できなくなる場合があると思います。そんな時にサクッとメンテナンス画面を表示してくれるGem、『turnout』の紹介です。


Gemのインストール

Gemfileに以下を追加して、コンソールでbundleを実行してください。

1
2
# メンテナンス画面の表示
gem 'turnout'

使い方

メンテナンス画面を表示させる場合にはコマンドを実行。

1
bundle exec rake maintenance:start reason="ごめんご"

すると次のようなメンテナンス画面が表示されるようになります。

turnout maintenance screen

メンテナンスが完了したら、以下のコマンドを実行すると通常の画面が表示されるようになります。

1
bundle exec rake maintenance:end

maintenance.ymlについて

maintenance.ymlにあらかじめ設定を書いておくとDRYです。

設定出来る項目は以下のとおりです。

reason: メンテナンス理由(HTMLもOK)
allowed_paths: 表示を許可するパス(正規表現)
allowed_ips: 表示を許可するIP

公式GitHubにあった設定例です。

1
2
3
4
5
6
7
8
---
reason: Someone told me I should type <code>sudo rm -rf /</code>
allowed_paths:
- ^/help
- ^/contact_us
allowed_ips:
- 127.0.0.1
- 192.168.0.0/24

Capistranoとの連携

次にCapistranoでdeploy中にメンテナンス画面が表示されるようにするcapistranoタスクを作ってみます。config/deploy.rbに以下を追加。

1
2
3
4
5
6
7
8
9
10
11
12
13
namespace :maintenance do
  desc "Maintenance start"
  task :on, :roles => :web do
    on_rollback { run "rm #{current_path}/tmp/maintenance.yml" }
    page = File.read("config/maintenance.yml")
    put page, "#{current_path}/tmp/maintenance.yml", :mode => 0644
  end

  desc "Maintenance stop"
  task :off, :roles => :web do
    run "rm #{current_path}/tmp/maintenance.yml"
  end
end

あとは、capistranoのデプロイ途中でかましてあげたり、

after "deploy", "maintenance:on"
...デプロイ処理...
after "deploy", "maintenance:off"

もしくはローカルのコマンドラインから次の様に実行して、メンテナンス画面を呼び出したり、

cap production maintenance:on
cap production maintenance:off

とお好みでいろいろできます。

公式サイト

turnoutの公式Githubです。

biola/turnout

おすすめの書籍