Rails/Bundler precompile vs lazy compile
In the config/application.rb file in a Rails app, there's the开发者_StackOverflow中文版 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.
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.
加载中,请稍侯......
精彩评论