为什么Rails4在Gemfile中放弃对“资产”组的支持

在Rails 3中,专门用于在资产管道中生成资产的gem被正确放置在assetsGemfile组中:


...


# 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,其中默认包含任何组之外的资产相关的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


...

这是否意味着这些宝石现在将默认捆绑在生产版本中?如果是这样,为什么会改变主意?Rails 4是否正在朝着生产中动态生成资产的方向迈进?


函数式编程
浏览 619回答 3
3回答

拉莫斯之舞

以前,资产组的存在是为了避免生产中意外进行按需编译。由于Rails 4不再具有这种行为,因此删除资产组是有意义的。在更改了该内容的提交中对此进行了更详细的说明。我用实际答案提取了一些引号。如果您使用的是咖啡模板,则可能需要(生产中的)一些宝石,例如咖啡轨,并且现在不再按需在生产中预编译资产这一事实。(不是在生产中按需进行预编译)意味着,如果您在3.2.x的生产环境中拥有该gems而忘记进行预编译,则Rails将完全按照其在开发中的工作进行操作,并预编译所请求的资产。在Rails 4中,情况不再如此,因此,如果您不使用任务对资产进行预编译,则在请求资产时将获得404。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Ruby