2013年10月3日木曜日

RailsBaseURIを指定したRailsアプリケーションでアイコンが消える問題

Railsアプリケーションをルートではなくサブディレクトリで動作させている場合、Apacheのhttpd.confにRailsBaseURIを指定する。 このときAssetのprecompileで生成されるパスが/assetとなっているために、例えばgifやpngなどのアイコンが画面から消えてしまう事象が発生した。

この問題を解決するにはAssetをprecompileする際にRAILS_RELATIVE_URL_ROOTという環境変数にRailsBaseURIに設定したパスを与えればよい。

たとえば

RailsBaseURI = /subdir
のときは
rake assets:precompile RAILS_ENV=production RAILS_RELATIVE_URL_ROOT="/subdir"

Capistranoでは以下のオプションを設定する。

set :asset_env, "#{asset_env} RAILS_RELATIVE_URL_ROOT=/subdir"