我刚刚把Rails 3.2.x应用程序更新到4.0.2。
当我部署到生产环境(ubuntu,MRI 2.0)时,我得到了一个关于缺少javascript运行时的老错误。
我很快通过安装node修复了它,但这让我很好奇。
我更喜欢在本地预编译这些资产,将它们签入git,然后将它们与应用程序的其余部分一起推送到生产服务器。
在Rails 3.2中,这个系统总是允许我不必关心生产中的js运行时,因为应用程序不需要编译coffeescript或运行uglyfier。
所以,问题是:rails 4有什么变化?是否有控制此行为的配置选项?
我检查了我的(rails 4)配置文件,我认为生产环境已经配置为不回退到实时编译。
与资产相关的配置选项:
配置/应用程序.rb

config.assets.precompile += ['html5shim.js']
config.assets.initialize_on_precompile = false

config/environments/production.rb配置/环境/生产
# Disable Rails's static asset server (Apache or nginx will already do this)
config.serve_static_assets = false

# Compress JavaScripts and CSS
config.assets.js_compressor = :uglifier
# config.assets.css_compressor = :sass

# Don't fallback to assets pipeline if a precompiled asset is missed
config.assets.compile = false

# Generate digests for assets URLs
config.assets.digest = true

# Version of your assets, change this if you want to expire all your assets
config.assets.version = '1.0'

最佳答案

以防有人像我一样问这个问题我也有同样的问题,这个链接给我指明了正确的方向:https://mattbrictson.com/upgrading-to-rails-4-with-capistrano。特别是下面的语句:在Rails 4中,标准Gemfile不再有:assets组,这意味着资产管道gem总是加载在所有服务器上的生产环境中我在本地预编译资产并将其上载到生产环境中,因此没有理由在生产服务器上使用JS运行时。
在我的例子中,我将group:asset添加到了我的Gemfile中,放置了与资产相关的gems。对我来说是:

group :asset do
  gem 'uglifier'
  gem 'execjs'
end

我的capistrano在没有:asset组的生产安装包上执行任务,因此在这一更改之后,生产不再需要JS运行时。

关于ruby-on-rails - Rails 4-生产中需要的JavaScript运行时,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21078595/

10-15 10:11