In the config/application.rb
file in a Rails app, there's the following section of code:
if defined?(Bundler) # If you precompile assets before deploying to production, use this line Bundler.require *Rails.groups(:assets => %w(development test)) # If you want your assets lazily compiled in production, use this line # Bundler.require(:default, :assets, Rails.env) end
I'm perhaps not clear what Bundler.require
is doing. I was under the impression that it required the specified sections in the Gemfile, but I'm not clear as to why Bundler.require *Rails.groups(...)
causes it to precompile and Bundler.require(...)
causes assets to be lazily loaded.
The Rails asset pipeline provides an assets:precompile rake task to allow assets to be compiled and cached up front rather than compiled every time the app boots. There are two ways you can use the asset pipeline on Heroku. Compiling assets locally. Compiling assets during slug compilation.
These lines don't actually change how your assets are used.
The first line,
Bundler.require *Rails.groups(:assets => %w(development test))
only loads gems from the assets
group in your development and test environment. This means that things like sass-rails
and uglifier
won't be available in production, which then means that you won't be able to properly compile/minify/whatever your assets on the fly in production if you're making use of those gems.
On the other hand,
Bundler.require(:default, :assets, Rails.env)
will load the assets
group in any environment, making those gems available in production to do asset compilation/minification/whatever on the fly.
So, as stated above, these lines don't actually change the behaviour of your asset pipeline - it simply means that you should use the first if you're going to precompile your assets for production, or use the second if you're going to lazily compile in production.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With