jem*_*ons 96 asset-pipeline ruby-on-rails-4
在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
Run Code Online (Sandbox Code Playgroud)
现在,根据(仍在进行中)升级文档:
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
...
Run Code Online (Sandbox Code Playgroud)
这是否意味着这些宝石现在默认捆绑在生产版本中?如果是这样,为什么改变心意?Rails 4是否正朝着生产中动态生成资产的方向发展?
Fil*_*sti 97
以前,资产组织的存在是为了避免生产中出现意外的按需编译.由于Rails 4不再那样,因此删除资产组是有意义的.
在更改它的提交中更详细地解释了这一点.我用实际答案提取了一些引号.
如果您正在使用咖啡模板,那么可能需要一些宝石(在生产中),如咖啡轨道,以及现在资产不再按生产需求进行预编译.
(没有在生产中根据需要进行预编译)意味着如果你在3.2.x的生产环境中拥有那些宝石并忘记预编译,那么Rails将完全按照它在开发中的做法,预编译所请求的资产.这在Rails 4中不再适用,因此如果您不使用任务预编译资产,那么当资产是请求时,您将获得404.
Zol*_*tan 13
Rails 4尝试强制您在部署之前预编译资产.您必须预先编译您的资产
$ RAILS_ENV=production bundle exec rake assets:precompile
Run Code Online (Sandbox Code Playgroud)
为什么?我在指南中找到了这个:
默认情况下,Rails假定资产已经过预编译,并且将由Web服务器作为静态资产提供.
(来源:http://edgeguides.rubyonrails.org/asset_pipeline.html#in-production)
但很多时候你必须在生产中使用这些'资产'宝石......例如,如果你在views目录中使用js.coffee文件,那么Rails也需要在生产模式下使用咖啡编译器.
所以我想,这种变化的原因是性能提升......而且看起来也更简单.:)
| 归档时间: |
|
| 查看次数: |
22079 次 |
| 最近记录: |