如何在capistrano上设置环境变量?

时间:2014-08-29 12:24:48

标签: ruby-on-rails ruby ruby-on-rails-3 capistrano

在我的rails应用程序中,我设置了env的响应头:

response.headers['application-version'] = ENV["APPLICATION_VERSION"]

我尝试在capistrano部署文件中设置env变量,但这不起作用。

set :default_environment, {
    'APPLICATION_VERSION' => Time.now.strftime('%Y%m%d%H%M%S%L')
}

我如何在部署中设置env变量?

3 个答案:

答案 0 :(得分:4)

设置default_environment(或Capistrano 3.x的default_env)只会在部署命令中设置变量。来自docs

  

一个哈希,可用于设置应该为所有执行的命令提供的环境变量。

如果你想设置rails服务器使用的环境变量---这是另一个进程,另一个vm实例,在另一个登录会话中---你需要为正在执行的会话设置env变量,例如通过.bashrc.profile.zshrc或您正在使用的任何shell。您还可以使用某些环境变量管理器,例如direnvrbenv-vars

希望有所帮助。

答案 1 :(得分:0)

在一个Rails应用程序中,我使用Capistrano 3.我使用default_env

设置我的变量
set :default_env, {
  'APPLICATION_VERSION' => Time.now.strftime('%Y%m%d%H%M%S%L')
}

对于另一个Rails应用程序,我使用Capistrano 2.我使用:default_environment来设置变量。

答案 2 :(得分:0)

我安装了宝石费加罗,更新了capistrano2文件:

task :set_version do
  put 'application_version: ' + Time.now.strftime('%Y%m%d%H%M%S%L'), "#{current_path}/config/application.yml"
end

before 'deploy:start', 'set_version'

在我需要application_version变量的地方,我在rails文件中得到它:

app_version = Figaro.env.application_version

p.s:' deploy:restart'不要重新加载config / application.yml文件,需要:' deploy:stop'并且'部署:开始'