Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Asset filtered out and will not be served: add `config.assets.precompile

I just migrated my Application to rails 4.1.0 from 4.1.rc2. Started getting these errors for my JS files

ActionView::Template::Error: Asset filtered out and will not be served: add `config.assets.precompile += %w( my_js )` to `config/application.rb` and restart your server
like image 261
AnkitG Avatar asked Apr 09 '14 18:04

AnkitG


3 Answers

Responding to urging from Heroku, the Rails maintainers have merged sanity checks from the sprockets_better_errors gem into Rails 4.1. See https://github.com/rails/sprockets-rails/pull/84

The intent is to reveal asset pipeline errors that you would see in production when you run the app in development mode.

You probably are using a javascript_include_tag in an application layout instead of placing your JavaScript files in the app/assets/javascripts/ folder.

You could move your files to the app/assets/javascripts/ folder.

Alternatively, you'll need to update your config/application.rb file to include:

config.assets.precompile += %w( my_js )

Note that the filename should not include the .js file extension.

like image 100
Daniel Kehoe Avatar answered Nov 12 '22 15:11

Daniel Kehoe


If you have added something like stylesheet_link_tag params[:controller] to your application layout header, because you have separate JS applications on different controllers but with same basic layout, you will be quite annoyed with this. Quick way to get over this and continue work (but maybe not a final solution) with all assets precompiled is to add the following to the /config/initializers/assets.rb:

Rails.application.config.assets.precompile += [/.*\.js/,/.*\.css/]

Note that this is as it is even for .js.coffee and .css.scss, .js and .css are enough.

like image 33
zmilojko Avatar answered Nov 12 '22 16:11

zmilojko


Ideally, the solution by @zmilojko works but I also have active admin in this app.. hence after looking a little further I found the following solution:

Rails.application.config.assets.precompile += %w(*.svg *.eot *.woff *.ttf *.gif *.png *.ico)
Rails.application.config.assets.precompile << /\A(?!active_admin).*\.(js|css)\z/

Just add the lines above to: /config/initializers/assets.rb

The code above precompiles assets while skipping active admin files. so that they are not processed twice or out of turn leading to errors.

like image 5
whizcreed Avatar answered Nov 12 '22 16:11

whizcreed