Rails / Bundler precompile vs lazy compile - PullRequest
       0

Rails / Bundler precompile vs lazy compile

23 голосов
/ 06 октября 2011

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

1 Ответ

49 голосов
/ 06 октября 2011

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

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

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

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

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

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

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

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

...