Почему Rails4 отказался от поддержки группы "активы" в Gemfile

В Rails 3 драгоценные камни, используемые исключительно для генерации активов в конвейере активов, были правильно помещены в группу assets Gemfile:

...

# Gems used only for assets and not required
# in production environments by default.
group :assets do
  gem 'sass-rails'
  gem 'coffee-rails'
  gem 'uglifier'

  # See https://github.com/sstephenson/execjs#readme for more supported runtimes
  # gem 'therubyracer', :platforms => :ruby
end

Теперь, согласно (еще не выполненной) документации по обновлению:

Rails 4.0 удалил группу активов из Gemfile. Вам нужно будет удалить эту строку из Gemfile при обновлении.

Конечно, создание нового проекта с RC1 дает Gemfile с драгоценными камнями, связанными с активами, включенными по умолчанию вне любой группы:

source 'https://rubygems.org'

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.0.0.rc1'

# Use sqlite3 as the database for Active Record
gem 'sqlite3'

# Use SCSS for stylesheets
gem 'sass-rails', '~> 4.0.0.rc1'

# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'

# Use CoffeeScript for .js.coffee assets and views
gem 'coffee-rails', '~> 4.0.0'

# See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem 'therubyracer', platforms: :ruby

...

Означает ли это, что эти драгоценные камни теперь будут включены в производственные сборки по умолчанию? Если да, то почему смена сердца? Является ли Rails 4 движущимся к динамической генерации активов в производстве?

Ответ 1

Ранее группа активов существовала во избежание непреднамеренной компиляции по требованию в производстве. Поскольку Rails 4 больше не ведет себя так, имеет смысл удалить группу активов.

Это более подробно объясняется в коммите, который изменил это. Я получил некоторые цитаты с фактическим ответом.

Некоторые драгоценные камни могут быть необходимы (в производстве), например, кофе-рельсы, если вы используете кофе-шаблоны и тот факт, что теперь активы не прекомпилируются по требованию в производстве.

(не предварительно скомпилированный по требованию в производстве) Означает, что если у вас есть эти драгоценные камни в производственной среде в 3.2.x и забудьте предварительно скомпилировать, Rails будет делать именно то, что он делает в разработке, предварительно скомпилируйте запрошенные активы. Это больше не относится к Rails 4, поэтому, если вы не прекомпилируете активы, используя задачи, вы получите 404, когда будут запрошены активы.

Ответ 2

Rails 4 попытается заставить вас предварительно скомпоновать ваши активы перед развертыванием. Вы должны предварительно скомпилировать свои активы с помощью

$ RAILS_ENV=production bundle exec rake assets:precompile

И почему? Я нашел это в Руководстве:

По умолчанию Rails предполагает, что активы были предварительно скомпилированы и будут служил статическим ресурсом вашим веб-сервером.

(Источник: http://edgeguides.rubyonrails.org/asset_pipeline.html#in-production)

Но много раз вам приходится использовать эти "активы" в производстве... например, если вы используете файл js.coffee в вашем каталоге представлений, тогда Rails нуждается в компиляторе кофе в рабочем режиме.

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

Ответ 3

Мы хотим, чтобы coffeescript с AJAX (история), поэтому coffee-rails выходит из группы активов.
sass-rails misbehaves (история), поэтому он выходит из группы активов.

Введите группу активов.