prefix を rails の url につける

LONERさん
LONERさん
rails で出てくるURLの頭に prefix をつける方法。
いろんな事情があって、別サーバの nginx でアクセスを受け付ける。でも、この待ち受けサーバの上でも rails が動いているため、アクセスをなんとかして分けなければいけない。次の記述を追加する。

# /etc/nginx/nginx.conf など設定ファイル
location /mypage/assets/ {
proxu_pass http://target_server/mypage/assets/;
proxy_redirect default;
}
location /mypage/ {
proxy_pass http://target_server/
proxy_redirect default;
}


# config/environments/production.rb, development.rb, test.rb
# Add: setting root for assets
config.assets.prefix = "/sp/assets"

なんでこれをやるかというと、target_server では、いつも通り 80番ポートで localhost みたいな感じでアクセスできる。proxy_pass の指定により、 server_name/mypage/ABC でアクセスしたときは target_server/ABC のコンテンツを出力することになる。assets を特別扱いしているのには理由がある。
location mypage の記述だけだと、server_name/mypage/assets/ABC にアクセスした場合、ページでは /assets/XXX.css などのように記述され、server_name/assets/XXX.css を使用することになってしまう。そこで、特別に config.assets.prefix(上では /mypage)を指定して、target_server のコンテンツを取得できるようにする。
これだけで、モノとしては動くが、css が読み込めなくなる場合がある。どういうことかというと、背景に指定した画像が /assets/XXX.png などの指定になっているため、 server_name/assets/XXX.png を見に行ってしまうのだ。これについてはうまい解決策が思いつかなかったが、/mypage/assets/XXX.png に書き換えてやれば動くようにはなる。

環境: rails 3.2, ruby 1.9.3
LONERさんのブログ一覧