productionで、** isn't precompiled
このエラーを見かけたら、
ActionView::Template::Error (application.css isn't precompiled):
まずは precompile してみる。再起動を忘れずに!
$ rake assets:precompile
$ touch tmp/restar.txt
precompile 面倒くさい...
または、それでもやっぱり ** isn't precompiled になる場合。最適化の恩恵受けられないけど、仕方なくアセットを随時生成するという手も。
- 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.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 にしてしまったからかも。
# 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の場合
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