Rails / Bundler预编译与延迟编译

在Rails应用config/application.rbconfig/application.rb文件中,有以下代码部分:

 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 

我可能不清楚Bundler.require正在做什么。 我的印象是它需要Gemfile中的指定部分,但我不清楚为什么Bundler.require *Rails.groups(...)导致它预编译和Bundler.require(...)导致懒惰的资产。

这些行实际上并未改变资产的使用方式。

第一行,

 Bundler.require *Rails.groups(:assets => %w(development test)) 

仅在开发和测试环境中从assets组加载gem。 这意味着sass-railsuglifier类的东西将无法在生产中使用,这意味着如果您正在使用那些,那么您将无法正常编译/缩小/生产中的任何资产。gem。

另一方面,

 Bundler.require(:default, :assets, Rails.env) 

将在任何环境中加载assets组,使生产中的这些gem可以进行资产编译/缩小/随时随地。

因此,如上所述,这些行实际上并不会改变资产管道的行为 – 它只是意味着如果您要将资产预编译用于生产,则应使用第一行,或者如果您要进行生产,则使用第二行在生产中懒洋洋地编译。