我想指示Capistrano加载在远程服务器上定义的环境变量。我怎么能这样做?
似乎当我在.bashrc
文件中导出我的环境变量时,Capistrano不会考虑它们。 Capistrano似乎正在执行/usr/bin/env
来创建执行远程命令的环境,但这似乎并没有从.bashrc
加载环境变量。
我也告诉你,我也在使用rvm-capistrano
(以防它可能有所帮助)。
有任何线索吗?
答案 0 :(得分:27)
虽然这个问题已经超过六个月了,但我会留在这里以防万一有人遇到同样的问题。
Capistrano实际上 加载.bashrc
。但是在文件的顶部附近你会发现:
# If not running interactively, don't do anything
[ -z "$PS1" ] && return
如果您在该行之后执行任何export
,则Capistrano将无法访问。解决方案只是将我的设置放在上面,而Capistrano就是我想要的。
此解决方案也被注意到at this GitHub问题。
答案 1 :(得分:0)
Capistrano没有加载.bashrc
,因为它不是交互式shell。据我记得虽然它确实加载了.bash_profile
,所以你可能会有更好的运气使用它。
答案 2 :(得分:0)
您可以通过发出以下命令将当前环境变量传递给ssh进行远程执行:
env | ssh user@host remote_program
同样以here
为例on roles(:app), in: :sequence, wait: 5 do
within "/opt/sites/example.com" do
# commands in this block execute in the
# directory: /opt/sites/example.com
as :deploy do
# commands in this block execute as the "deploy" user.
with rails_env: :production do
# commands in this block execute with the environment
# variable RAILS_ENV=production
rake "assets:precompile"
runner "S3::Sync.notify"
end
end
end
end
看起来您可以使用with
设置环境变量来执行。因此,请阅读您当前的环境变量并使用with
设置它们。
答案 3 :(得分:-1)
在Capistrano 3中set :default_env, { ... }
喜欢这里:
set :default_environment, {
'env_var1' => 'value1',
'env_var2' => 'value2'
}
你可以参考这个: Previous post..