我需要找到一種方法來設置來自Capistrano的全局env變量。實際值是在運行時生成的,我無法在回購中檢查它並從那裏加載。Capistrano:如何設置全局環境變量?
該值必須在一個初始值設定被加載爲ENV['RAILS_ASSET_ID']
。
我該怎麼做?
我需要找到一種方法來設置來自Capistrano的全局env變量。實際值是在運行時生成的,我無法在回購中檢查它並從那裏加載。Capistrano:如何設置全局環境變量?
該值必須在一個初始值設定被加載爲ENV['RAILS_ASSET_ID']
。
我該怎麼做?
作爲一種變通方法,我用這個方法至今:
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]
但是,必須有一個更好的辦法。有任何想法嗎?
如何在初始化程序中指定它?
ENV['RAILS_ASSET_ID'] = 12345
如果全局變量你的意思是在Capistrano的產生,後來在Rails中用過的東西然後是,你必須建立某種形式的文件。 Ruby變量不會在運行之間持續。環境變量可以設置,但只適用於子流程。部署期間轉儲服務器上的文件
一種方式是像你這樣有什麼,只有遠程:
run "echo #{asset_version} > #{release_path}/config/asset_version.conf"
以後您可以選擇和讀取該值作爲你所做的一切。
不能使用default_environment
Capistrano的變量? CF github/capistrano
例如,我們可以在生產中使用它rbenv:
set :default_environment, {
'PATH' => "$HOME/.rbenv/shims:$HOME/.rbenv/bin:$PATH"
}
更好的辦法:'回聲#{} asset_version >>#{}的current_path /配置/初始化/ asset_version.rb' –
你爲什麼要重複追加到一個文件而不清除舊的值? – tadman
每個cap部署都會創建一個新的目錄結構,因此文件_不應該在那裏。 '''是一種安全機制,以防有一天開發者創建該文件。 –