链轮中的环境特定变量

时间:2012-07-12 22:36:31

标签: ruby-on-rails-3 sprockets

我使用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

2 个答案:

答案 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中),那就更好了。