我需要找到一种方法来设置来自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部署都会创建一个新的目录结构,因此文件_不应该在那里。 '''是一种安全机制,以防有一天开发者创建该文件。 –