2011-10-20 45 views
3

我需要找到一种方法来设置来自Capistrano的全局env变量。实际值是在运行时生成的,我无法在回购中检查它并从那里加载。Capistrano:如何设置全局环境变量?

该值必须在一个初始值设定被加载为ENV['RAILS_ASSET_ID']

我该怎么做?

回答

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] 

但是,必须有一个更好的办法。有任何想法吗?

+0

更好的办法:'回声#{} asset_version >>#{}的current_path /配置/初始化/ asset_version.rb' –

+0

你为什么要重复追加到一个文件而不清除旧的值? – tadman

+0

每个cap部署都会创建一个新的目录结构,因此文件_不应该在那里。 '''是一种安全机制,以防有一天开发者创建该文件。 –

3

如何在初始化程序中指定它?

ENV['RAILS_ASSET_ID'] = 12345 
2

如果全局变量你的意思是在Capistrano的产生,后来在Rails中用过的东西然后是,你必须建立某种形式的文件。 Ruby变量不会在运行之间持续。环境变量可以设置,但只适用于子流程。部署期间转储服务器上的文件

一种方式是像你这样有什么,只有远程:

run "echo #{asset_version} > #{release_path}/config/asset_version.conf" 

以后您可以选择和读取该值作为你所做的一切。

5

不能使用default_environment Capistrano的变量? CF github/capistrano

例如,我们可以在生产中使用它rbenv:

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