Подтвердить что ты не робот

Rails/Bundler precompile против ленивого компиляции

В файле config/application.rb в приложении Rails есть следующий раздел кода:

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(...) приводит к ленивой загрузке ресурсов.

4b9b3361

Ответ 1

Эти строки фактически не влияют на использование ваших активов.

Первая строка,

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

загружает только камни из группы assets в вашей среде разработки и тестирования. Это означает, что такие вещи, как sass-rails и uglifier, не будут доступны в производстве, а это значит, что вы не сможете правильно компилировать/минимизировать/независимо от ваших активов на лету в производстве, если вы используете этих драгоценных камней.

С другой стороны,

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

будет загружать группу assets в любую среду, делая эти драгоценные камни доступными в производстве для компиляции/минимизации активов/на лету.

Итак, как указано выше, эти строки фактически не изменяют поведение вашего конвейера активов - это просто означает, что вы должны использовать первое, если вы собираетесь предварительно скомпилировать свои активы для производства или использовать второе, если вы "лениво компилируется в производство".