【发布时间】:2013-04-30 15:34:08
【问题描述】:
在 Rails 3 中,专门用于在资产管道中生成资产的 gem 被正确放置在 Gemfile 的 assets 组中:
...
# 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
现在,根据(仍在进行中)upgrade documentation:
Rails 4.0 从 Gemfile 中删除了资产组。升级时,您需要从 Gemfile 中删除该行。
果然,使用 RC1 创建一个新项目会生成一个 Gemfile,其中包含默认包含在任何组之外的资产相关 gem:
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
...
这是否意味着这些 gem 现在将默认捆绑在生产版本中?如果是这样,为什么会改变主意? Rails 4 是否正在朝着在生产环境中动态生成资产的方向发展?
【问题讨论】:
-
我仍然不明白“资产组”的目的是什么,以及 Rails 4 中的哪些变化使得资产组变得不必要。
-
“资产组”对不同的人来说是不同的东西。我把它用作放置我不需要捆绑在生产中的宝石的地方。但从与已接受答案相关的对话来看,至少 Rails 核心中的一些人将其用作确保非预编译资产在生产中失败并出现 404 的方式(而不是静默自动生成,这会导致不良表现)。改变的是 rails4 不再自动生成资产,因此“资产组”解决方法(正如 rails 核心看到的那样)已被删除。
-
这是迄今为止最清楚的解释。如果你把它放在答案中,赏金就是你的。
-
@MichieldeMare 我会为自己的问题获得赏金感到很奇怪;-) 如果您愿意,可以将赏金提供给 Filipe Giusti(公认的答案),因为他在帮助方面发挥了重要作用我明白了。
-
对未来人们的警告:如果您选择忽略 Rails 升级指南并将资产组保留在 Gemfile 中,请记住 Rails 在编译资产时将不再自动需要资产组在生产中。您需要自己执行此操作,或者在命令前添加
RAILS_GROUPS=assets(请参阅Rails.groups)以在您的构建环境中预编译生产中的资产。
标签: asset-pipeline ruby-on-rails-4