2012-07-12 93 views
2

我使用內置鏈輪功能的Rails 3.2編譯靜態資產。是否有可能編譯與環境特定變量的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

鏈輪使您可以將任意數量的預處理器的一個文件名。最後添加一個.erb,它將首先被解釋爲ERB,然後輸出爲JavaScript文件。

mv assets/javascripts/myfile.js assets/javascripts/myfile.js.erb

檢查出JavaScript/CoffeeScript and ERB滑軌資產管道指南。

+0

謝謝,這是一個好主意,但這意味着文件將在每次請求時重新編譯。我正在詢問一次編譯(每次部署,比方說) – katzmopolitan 2012-10-17 16:44:42

+0

重溫這個,我以前的評論不是(完全)正確的。如果打開了部署時間預編譯,那麼它只會根據需要編譯一次 – katzmopolitan 2013-11-03 19:58:57

+0

您應該始終[預編譯資源](http://guides.rubyonrails.org/asset_pipeline.html#precompiling-assets)生產,並且您應該通過在production.rb中設置'config.assets.compile = false'完全關閉生產中的資產管道。 – 2013-11-03 22:08:21

0

此問題的任何更新?

使用.erb擴展名可解決問題,但無法預編譯資產。

在我的情況下,我需要預編譯我的臨時環境的資產。當我做rake資產:預編譯RAILS_ENV = staging,我可以看到在生成的js資產中我的環境變量沒有定義,因此字符串插值會產生一個空字符串。

的問題是(我認爲)環境變量定義在配置/ application.rb中,同時產生資產,不叫。

我認爲創建Capistrano可能會幫助您在生成資產前添加一些任務,但是如果我們可以在生成資產的同時定義一些環境變量(例如在CLI中),則會更好。

+0

如果你更新你的application.rb有 '''config.assets.initialize_on_precompile = true''' 這應該可以解決問題。 http://guides.rubyonrails.org/asset_pipeline.html#precompiling-assets – katzmopolitan 2013-11-03 19:56:02

+0

不幸的是,因爲我使用Heroku的,它需要這個是假的,我不能這樣做初始化函數,然後預編譯資產。 – Mahdi 2013-11-04 06:48:07

+0

我解決了這個通過添加rake任務,我先打電話環境: – Mahdi 2013-11-04 07:03:14