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

Ruby on rails Capistrano:如何设置全局环境变量?,ruby-on-rails,environment-variables,capistrano,Ruby On Rails,Environment Variables,Capistrano,我需要找到一种从Capistrano设置全局环境变量的方法。实际值是在运行时生成的,我不能在repo中检查它并从那里加载 此值必须作为ENV['RAILS\u ASSET\u ID']加载到一个初始值设定项中 如何才能做到这一点?作为一种解决方法,我目前正在使用这种方法: desc 'My custom task' task :task_foo do asset_version = 12345 system "echo #{asset_version} > RAILS_ASSET_

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

此值必须作为
ENV['RAILS\u ASSET\u 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\u环境
capistrano变量吗? 碳纤维

例如,我们可以将其用于生产中的rbenv:

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

更好的方法:
echo{asset_version}>>{current_path}/config/initializers/asset_version.rb
为什么要在不清除旧值的情况下反复追加到文件中?每个cap部署都会创建一个新的dir结构,因此文件不应该存在。
>
是一种安全机制,以防某一天开发人员创建该文件。链接已失效