デプロイ直後にアクセスすると必ずエラーが発生するので対応。
環境
- OS: CentOS release 5.5 (Final)
- Ruby: ruby 1.8.7 (2010-08-16 patchlevel 302) [x86_64-linux]
- Ruby on Rails: 3.2.6
エラー内容
アクセスした時に発生。
1 | Errno::EPERM in Hoge#index |
ちなみにログファイルには下記のように出力されてる。
1 | ActionView::Template::Error (Operation not permitted - /var/www/hoge/releases/20120823092832/tmp/cache/assets/D4E/100/sprockets%2F3fc9cdaa37d24912e4d922964a95de96): |
原因
rake assets:precompile
を実行した時にプリコンパイルされるスタイルシートから漏れているファイルを読み込もうとすると発生する。
通常は application.css.scss
に
1 | /* |
上記のように記述して結合したものを読み込むが、記述されていないファイルを読み込もうとしてしまっている。
解決方法
プリコンパイルされていないファイルを読み込んだ時にコンパイルするように
1 | config.assets.compile = true |
上記を追記してもいいが、初回のアクセス時にコンパイルするため時間がかかる。
なので、rake assets:precompile
実行時に結合しないファイルも一緒にプリコンパイルするように以下のように設定する。
1 | config.assets.precompile = %w(hoge.css bar.css foo.css) |
ちなみに Capistrano でデプロイ時に設定するには Capfile
へ下記を追記。
1 | load 'deploy' |
以上です。