在我的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变量?
答案 0 :(得分:4)
设置default_environment
(或Capistrano 3.x的default_env
)只会在部署命令中设置变量。来自docs:
一个哈希,可用于设置应该为所有执行的命令提供的环境变量。
如果你想设置rails服务器使用的环境变量---这是另一个进程,另一个vm实例,在另一个登录会话中---你需要为正在执行的会话设置env变量,例如通过.bashrc
,.profile
,.zshrc
或您正在使用的任何shell。您还可以使用某些环境变量管理器,例如direnv,rbenv-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'并且'部署:开始'