2011年8月12日金曜日

rails3でのsub ディレクトリへのデプロイ

■概要

rails3.0.9・unicorn・nginxの組み合わせで、subディレクトリにアプリケーションをデプロイしようとすると、少しはまったのでメモを残しておきます。

■設定方法

http://ホスト名/foo 以下にアプリをデプロイしたい場合...

○unicorn

unicorn_railsを実行する際に--pathを渡します。

例)
$ unicorn_rails -c config/unicorn.rb -E production -D --path /foo

○nginx

passengerと同じくDocument Root直下に、subディレクトリ名でpublicへのシンボリックリンクをはればOKです。またlocation設定はsubディレクトリ毎に設定するのが良い感じでしょうね。

例)
$ ln -s /path/to/foo_root/public /var/apps/foo
$ vim /etc/nginx/nginx.conf
...
root /var/apps/;
...
location /foo {
  if (-f $request_filename) { break; }
  proxy_set_header X-Real-IP  $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header Host $http_host;
  proxy_pass http://(foo用のunixドメインのソケット);
}

○rails3.0.9

ActionController::Base.config.relative_url_root= が、deprecatedなのでどうしようかと思いますが検証した結果、下記で上手く行きました。
通常のroutingもassetもこれで上手くいきます(config.serve_static_assets = false なので、assetsはnginxが処理します)。

・unicon_rails --pathの設定は、ENV['RAILS_RELATIVE_URL_ROOT']となってrack側に渡される
・ENV['RAILS_RELATIVE_URL_ROOT']は、ActionController::Base.config.relative_url_rootに代入されている(?)
・よってconfig.ruで下記のようにrunを囲む
map ActionController::Base.config.relative_url_root || "/" do
  run FooApp::Application
end
参考:困った時のstackoverflow http://stackoverflow.com/questions/3181746/what-is-the-replacement-for-actioncontrollerbase-relative-url-root

0 件のコメント:

コメントを投稿