Rails/Bundler预编译与延迟编译

Mat*_*tty 23 ruby-on-rails bundler

config/application.rbRails应用程序的文件中,有以下代码部分:

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
Run Code Online (Sandbox Code Playgroud)

我可能不清楚Bundler.require在做什么.我的印象是它需要Gemfile中的指定部分,但我不清楚为什么Bundler.require *Rails.groups(...)导致它预编译并Bundler.require(...)导致资产被延迟加载.

Bar*_*aun 49

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

第一行,

Bundler.require *Rails.groups(:assets => %w(development test))
Run Code Online (Sandbox Code Playgroud)

assets在开发和测试环境中加载组中的gem .这意味着事情喜欢sass-railsuglifier生产将不可用,然后意味着你将不能正确地编译/缩小/如果你正在做什么你就生产动态资产使用这些宝石.

另一方面,

Bundler.require(:default, :assets, Rails.env)
Run Code Online (Sandbox Code Playgroud)

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

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

  • 如果您的预编译资产有任何理由不将这些资产gems直接放在没有组的Gemfile中,如果它们被包含在每个环境中呢? (3认同)