我使用Rails 3.2内置的sprockets功能来编译静态资产。是否可以使用特定于环境的变量编译javascript?
所以我想做这样的事情
/assets/javascripts/myfile.js
//lots of code
script.src =
('https:' == document.location.protocol ? 'https://' : 'http://') +
'some.metrics.site/projects/<%=ENV_SPECIFIC_TOKEN%>.js';
//lots of other code
答案 0 :(得分:1)
Sprockets允许您将任意数量的预处理器附加到文件名。在末尾添加.erb
,它将首先解释为ERB,然后输出为JavaScript文件。
mv assets/javascripts/myfile.js assets/javascripts/myfile.js.erb
查看JavaScript/CoffeeScript and ERB上的Rails资产管道指南。
答案 1 :(得分:0)
此问题的任何更新?
使用.erb扩展名可以解决问题,但不能解决资产预编译问题。
就我而言,我需要为我的暂存环境预编译资产。当我执行 rake assets:precompile RAILS_ENV = staging 时,我可以在生成的js资产中看到我的环境变量未定义,因此字符串插值会产生一个空字符串。
问题是(我认为)环境变量定义在config / application.rb中,在生成资产时不会调用。
我认为宝石Capistrano可能会在生成资产之前添加一些任务,但如果我们可以在生成资产时定义一些环境变量(例如在CLI中),那就更好了。