В 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 движется к динамической генерации производственных активов?
asset-pipeline
ruby-on-rails-4
Джеммонс
источник
источник
RAILS_GROUPS=assets
(см.Rails.groups
) Перед командой для предварительной компиляции ресурсов в производственной среде в вашей среде сборки.Ответы:
Раньше группа ресурсов существовала, чтобы избежать непреднамеренной компиляции по запросу в процессе производства. Поскольку Rails 4 больше не ведет себя так, имело смысл удалить группу ресурсов.
Это объясняется более подробно в коммите, который это изменил. Я извлек несколько цитат с фактическим ответом.
источник
Rails 4 пытается заставить вас предварительно скомпилировать ваши активы перед развертыванием. Вы должны предварительно скомпилировать свои активы с помощью
И почему? Я нашел это в Руководстве:
(Источник: http://edgeguides.rubyonrails.org/asset_pipeline.html#in-production )
Но много раз вам приходится использовать эти драгоценные камни «активы» в продакшене ... например, если вы используете файл js.coffee в своем каталоге представлений, то Rails также потребуется компилятор кофе в производственном режиме.
Думаю, причина этого изменения в улучшении производительности ... и к тому же выглядит более простым. :)
источник
assets
группу, не избавившись от него (если активы прекомпилированы, то эти камни не нужны в производстве и не должны быть включены Bundler). И да, может быть, вы бы использовали гем какcoffee-rails
в продакшене ... но так было и в Rails 3, верно? И Rails 3 по умолчанию помещенcoffee-rails
вassets
группу. Так почему же произошли изменения в Rails 4?Нам нужен coffeescript с AJAX ( история ), поэтому мы
coffee-rails
выходим из группы ресурсов.sass-rails
плохо себя ведет ( история ), поэтому он перемещается из группы активов.Осмотрите группу активов.
источник
Bundler.require :assets
не запускается. Это не повод для удаления группы активов. Мне не нужен Rubyracer, libv8 и т. Д. на производстве, почему кто-то делает? Шаблон Coffee можно скомпилировать в шаблон JS, и нет смысла компилировать его каждый раз, когда подставляется новое значение. Нет смысла брать всю эту ношу на продакшн.