Rails3でデプロイ直後にアクセスで発生する Errno::EPERM エラー対応した

デプロイ直後にアクセスすると必ずエラーが発生するので対応。

環境

  • 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Errno::EPERM in Hoge#index

Showing /var/www/hoge/releases/20120823092832/app/views/layouts/foo.html.erb where line #14 raised:

Operation not permitted - /var/www/hoge/releases/20120823092832/tmp/cache/assets/D4E/100/sprockets%2F3fc9cdaa37d24912e4d922964a95de96

Extracted source (around line #14):

11: <meta name="apple-mobile-web-app-capable" content="no" />
12: <title>タイトル</title>
13:
14: <%= stylesheet_link_tag 'jquery.mobile-1.0b1.min' %>
15: <%= stylesheet_link_tag 'bar' %>
16:

Trace of template inclusion: app/views/layouts/application.html.erb

Rails.root: /var/www/hoge/releases/20120823092832
Application Trace | Framework Trace | Full Trace

ちなみにログファイルには下記のように出力されてる。

1
2
3
4
5
6
7
8
ActionView::Template::Error (Operation not permitted - /var/www/hoge/releases/20120823092832/tmp/cache/assets/D4E/100/sprockets%2F3fc9cdaa37d24912e4d922964a95de96):

11: <meta name="apple-mobile-web-app-capable" content="no" />
12: <title>タイトル</title>
13:
14: <%= stylesheet_link_tag 'jquery.mobile-1.0b1.min' %>
15: <%= stylesheet_link_tag 'bar' %>
16:

原因

rake assets:precompile を実行した時にプリコンパイルされるスタイルシートから漏れているファイルを読み込もうとすると発生する。

通常は application.css.scss

application.css.scss
1
2
3
4
/*
*= require_self
*= require_tree .
*/

上記のように記述して結合したものを読み込むが、記述されていないファイルを読み込もうとしてしまっている。

解決方法

プリコンパイルされていないファイルを読み込んだ時にコンパイルするように

config/environments/production.rb
1
config.assets.compile = true

上記を追記してもいいが、初回のアクセス時にコンパイルするため時間がかかる。

なので、rake assets:precompile 実行時に結合しないファイルも一緒にプリコンパイルするように以下のように設定する。

config/environments/production.rb
1
config.assets.precompile = %w(hoge.css bar.css foo.css)

ちなみに Capistrano でデプロイ時に設定するには Capfile へ下記を追記。

Capfile
1
2
3
load 'deploy'
# Uncomment if you are using Rails' asset pipeline
load 'deploy/assets' # 追記

以上です。

© 2024 磁力式駆動 All Rights Reserved.
Theme by hiero