2011-10-20 52 views
3

我需要找到一種方法來設置來自Capistrano的全局env變量。實際值是在運行時生成的,我無法在回購中檢查它並從那裏加載。Capistrano:如何設置全局環境變量?

該值必須在一個初始值設定被加載爲ENV['RAILS_ASSET_ID']

我該怎麼做?

回答

1

作爲一種變通方法,我用這個方法至今:

desc 'My custom task' 
task :task_foo do 
    asset_version = 12345 
    system "echo #{asset_version} > RAILS_ASSET_ID" 
end 

,它是在初始化器檢索:

File.open(Rails.root.join 'RAILS_ASSET_ID').read.strip] 

但是,必須有一個更好的辦法。有任何想法嗎?

+0

更好的辦法:'回聲#{} asset_version >>#{}的current_path /配置/初始化/ asset_version.rb' –

+0

你爲什麼要重複追加到一個文件而不清除舊的值? – tadman

+0

每個cap部署都會創建一個新的目錄結構,因此文件_不應該在那裏。 '''是一種安全機制,以防有一天開發者創建該文件。 –

3

如何在初始化程序中指定它?

ENV['RAILS_ASSET_ID'] = 12345 
2

如果全局變量你的意思是在Capistrano的產生,後來在Rails中用過的東西然後是,你必須建立某種形式的文件。 Ruby變量不會在運行之間持續。環境變量可以設置,但只適用於子流程。部署期間轉儲服務器上的文件

一種方式是像你這樣有什麼,只有遠程:

run "echo #{asset_version} > #{release_path}/config/asset_version.conf" 

以後您可以選擇和讀取該值作爲你所做的一切。

5

不能使用default_environment Capistrano的變量? CF github/capistrano

例如,我們可以在生產中使用它rbenv:

set :default_environment, { 
'PATH' => "$HOME/.rbenv/shims:$HOME/.rbenv/bin:$PATH" 
}