LoginSignup
13
13

More than 5 years have passed since last update.

Rails3.2 Asset Pipelineが詰まった時の事例集

Posted at

productionで、** isn't precompiled

このエラーを見かけたら、

log/production.log
ActionView::Template::Error (application.css isn't precompiled):

まずは precompile してみる。再起動を忘れずに!

$ rake assets:precompile
$ touch tmp/restar.txt

precompile 面倒くさい...

または、それでもやっぱり ** isn't precompiled になる場合。最適化の恩恵受けられないけど、仕方なくアセットを随時生成するという手も。

config/environments/production.rb
- config.assets.compile = false
+ config.assets.compile = true

false だと、コンパイル済みファイルが見つからない場合にエラーになります。true にすると自動的に生成してくれます。

もちろんその分遅くなります。

application.jsに書いた関数が反映されない?

コンパイルされたjsのコード内にはapplication.js内のコードが書かれているにも関わらず、実行されない。

原因はちゃんと調べてませんが、別のファイル(hoge.jsなど)に書いてrequireするようにしたらOK。

application.jsのコメントにも書いてますが、application.jsにはコード書かない方が良いみたいです。

vendor/assets や lib/assets が読み込まれない

application.js で require してないかも

???

libのファイルは普通に読めるけど
vendorのファイルは require すらされない。
????

ベンダーライブラリは

config/environments/production.rb
config.assets.precompile += %w( some_lib.js )

config.assets.precompile += %w( *.js )」って書ける?

developmentで、jsが二重に読み込まれる

rm -rf public/assets/*

消して、再起動したらOKだった気がする。

developmentで、public配下のファイルが "no route matches" になる

serve_static_assets を false にしてしまったからかも。

config/environments/development.rb
# Disable Rails's static asset server (Apache or nginx will already do this)
serve_static_assets = false

コメントに書いてある通り Apache か nginx なら false にすべき。そうでないなら既定の true にすべきだろう。

asset pipelineのログを黙らせる

rails3.2の場合

config/initializers/quiet_assets.rb
Rails.application.assets.logger = Logger.new('/dev/null')
Rails::Rack::Logger.class_eval do
  def call_with_quiet_assets(env)
    previous_level = Rails.logger.level
    Rails.logger.level = Logger::ERROR if env['PATH_INFO'].index("/assets/") == 0
    call_without_quiet_assets(env).tap do
      Rails.logger.level = previous_level
    end
  end
  alias_method_chain :call, :quiet_assets
end
13
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
13