为什么Rails4在Gemfile中放弃对“资产”组支持(Why did Rails4 drop s

2019-09-02 02:57发布

在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

...

这是否意味着这些宝石生产建立在默认情况下,现在将被捆绑? 如果是这样,为什么心脏的变化? 被轨道4走向动态生成的生产资产?

Answer 1:

此前该资产组存在,以避免意外的编译按需生产。 由于轨道4并没有那样做了,这是有道理的删除该资产组。

这在更详细的解释在提交该改变了。 我摘录了一些报价与实际的答案。

可如果你正在使用的咖啡模板和现在的资产不能在生产中需要预编译了一个事实需要一些宝石(生产),如咖啡轨。

(不预编译的生产需求),意味着如果你有宝石在生产环境3.2.x中,却忘了预编译,Rails会做什么它在开发,预编译被请求的资产。 这是不正确了Rails中4,因此,如果您不使用预编译任务的资产,你会得到一个404,当资产的请求。



Answer 2:

轨道4试图迫使你在部署前预编译的资产。 您有预编译的资产

$ RAILS_ENV=production bundle exec rake assets:precompile

为什么? 我发现这个指南:

默认情况下,Rails的假定资产已经预编译,并会被你的Web服务器充当静态资产。

(来源: http://edgeguides.rubyonrails.org/asset_pipeline.html#in-production )

但很多时候你在生产中使用这些“资产”宝石...例如,如果你在你的看法目录使用js.coffee文件,然后Rails需要在生产模式咖啡编译器为好。

所以我想,这种变化的原因是性能的提高...,看起来更简洁为好。 :)



Answer 3:

我们希望与AJAX(CoffeeScript的历史 ),所以coffee-rails移出资产组。
sass-rails行为不端( 历史 ),所以它移出资产组。

AX中的资产组。



文章来源: Why did Rails4 drop support for “assets” group in the Gemfile