我需要找到一种从Capistrano设置全局env变量的方法。实际值是在运行时生成的,我无法在仓库中检查它并从那里加载。
此值必须作为ENV['RAILS_ASSET_ID']
加载到一个初始值设定项中。
我该怎么办?
答案 0 :(得分:6)
你不能使用default_environment
capistrano变量吗?
cf github/capistrano
例如,我们可以将它用于生产中的rbenv:
set :default_environment, {
'PATH' => "$HOME/.rbenv/shims:$HOME/.rbenv/bin:$PATH"
}
答案 1 :(得分:3)
如何在初始化程序中指定它?
ENV['RAILS_ASSET_ID'] = 12345
答案 2 :(得分:2)
如果通过全局变量表示在Capistrano中生成并稍后在Rails中使用的东西,那么是的,您将不得不创建某种文件。 Ruby变量在运行之间不会持久存在。可以设置环境变量,但仅适用于子流程。
在部署期间在服务器上转储文件的一种方法就像你在那里一样,只有远程:
run "echo #{asset_version} > #{release_path}/config/asset_version.conf"
您可以稍后选择并阅读该值。
答案 3 :(得分: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]
但必须有更好的方法。有什么想法吗?