Ruby on rails 3 链轮中特定于环境的变量
我正在使用Rails3.2内置的链轮功能来编译静态资产。是否可以使用特定于环境的变量编译javascript 所以我想做一些像这样的事情 /assets/javascripts/myfile.jsRuby on rails 3 链轮中特定于环境的变量,ruby-on-rails-3,sprockets,Ruby On Rails 3,Sprockets,我正在使用Rails3.2内置的链轮功能来编译静态资产。是否可以使用特定于环境的变量编译javascript 所以我想做一些像这样的事情 /assets/javascripts/myfile.js //大量的代码 script.src= ('https:'==document.location.protocol?'https://':'http://')+ 'some.metrics.site/projects/.js'; //许多其他代码 链轮允许将任意数量的预处理器附加到文件名。在末尾添加
//大量的代码
script.src=
('https:'==document.location.protocol?'https://':'http://')+
'some.metrics.site/projects/.js';
//许多其他代码
链轮允许将任意数量的预处理器附加到文件名。在末尾添加一个.erb
,它将首先被解释为erb,然后作为JavaScript文件输出
mv assets/javascripts/myfile.js assets/javascripts/myfile.js.erb
查看上的Rails资产管道指南。此问题有任何更新吗 使用.erb扩展可以解决问题,但在预编译资产时却不能 在我的例子中,我需要为我的登台环境预编译资产。当我执行rake assets:precompile RAILS_ENV=staging时,我可以在生成的js assets中看到没有定义我的环境变量,因此字符串插值会导致一个空字符串 问题是(我认为)环境变量定义在config/application.rb中,在生成资产时没有调用它
我认为gem Capistrano可以通过在生成资产之前添加一些任务来帮助我们,但是如果我们可以在生成资产时定义一些环境变量(例如在CLI中),那就更好了。谢谢,这是一个好主意,但这意味着在每次请求时都会重新编译文件。我问的是一次编译(比如说每次部署),当我再次访问时,我之前的评论(完全)不正确。如果启用了deploy time pre compile(部署时预编译),那么它只会编译一次,这是您在生产中应该始终做到的,您应该通过在production.rb中设置
config.assets.compile=false
来完全关闭生产中的资产管道。如果您将application.rb更新为config.assets.initialize\u on\u precompile=true
,应该可以解决这个问题。不幸的是,我不能这样做,因为我使用了heroku,而且它需要这个错:我通过添加一个rake任务解决了这个问题,我首先调用环境初始化函数,然后预编译资产。添加rails_12系数gem 2。设置用户环境编译变量
//lots of code
script.src =
('https:' == document.location.protocol ? 'https://' : 'http://') +
'some.metrics.site/projects/<%=ENV_SPECIFIC_TOKEN%>.js';
//lots of other code