Ruby on rails 3.2 RAILS_ENV、config.assets.debug和资产管道在Rails3中的关系如何?

Ruby on rails 3.2 RAILS_ENV、config.assets.debug和资产管道在Rails3中的关系如何?,ruby-on-rails-3.2,asset-pipeline,Ruby On Rails 3.2,Asset Pipeline,我们有UAT和生产环境来运行rails应用程序。UAT使用RAILS_ENV=UAT和RAILS_ENV=production为生产服务器运行应用程序。对于部署,我们在本地机器上编译资产,并将所有内容复制到这些服务器,这样我们就不必在UAT和生产服务器上编译资产 现在,我发现如果我设置config.assets.debug=true,我必须使用与我在资产编译时指定的环境相同的rails_ENV运行rails应用程序。 否则,我将得到以下错误 ExecJS::RuntimeUnavailable

我们有UAT和生产环境来运行rails应用程序。UAT使用RAILS_ENV=UAT和RAILS_ENV=production为生产服务器运行应用程序。对于部署,我们在本地机器上编译资产,并将所有内容复制到这些服务器,这样我们就不必在UAT和生产服务器上编译资产

现在,我发现如果我设置config.assets.debug=true,我必须使用与我在资产编译时指定的环境相同的rails_ENV运行rails应用程序。 否则,我将得到以下错误

ExecJS::RuntimeUnavailable in Welcome#index

    Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes.
    (in /opt/myapp/app/assets/javascripts/ping.js.coffee)
例如,如果我像下面这样编译资产:

rake assets:precompile:all RAILS_ENV=production RAILS_GROUPS=assets --trace
如果使用config.assets.debug=true将compiles资产复制到UAT服务器(其中RAILS_ENV是UAT),则不会出现错误

如果我将config.assets.debug设置为false,或者使用RAILS_ENV=production运行应用程序,那么它可以正常工作。但是,我不明白为什么不同的RAILS_ENV会产生问题 设置config.assets.debug=true时


有人能解释一下它们之间的关系吗?

您的UAT和生产机器上都安装了JavaScript运行时环境吗?可能只是其中一台机器缺少运行时。这一点并没有解决问题,只是解决了您的问题。Eric,我们没有在UAT和生产环境中安装JavaScript运行时。如果我的理解是正确的,我不必在生产/uat机器上安装JS runtime,因为它们使用已编译的资产。它在uat中对您有效吗?调试设置为false?我已经删除了我的答案,因为它对这个问题完全没有用。您考虑过关于的部分吗?我曾尝试在Rails或Sprocket源代码中锁定该点,但尚未成功。基本上,我怀疑为编译后的资产生成的哈希值取决于RACK/RAILS环境。