Capistrano:如何设置全局环境变量?

时间:2011-10-20 21:17:39

标签: ruby-on-rails environment-variables capistrano

我需要找到一种从Capistrano设置全局env变量的方法。实际值是在运行时生成的,我无法在仓库中检查它并从那里加载。

此值必须作为ENV['RAILS_ASSET_ID']加载到一个初始值设定项中。

我该怎么办?

4 个答案:

答案 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]

但必须有更好的方法。有什么想法吗?