我想指示 Capistrano 加载在远程服务器上定义的环境变量。我怎样才能做到这一点?
似乎当我在.bashrc
文件中导出我的环境变量时,Capistrano 没有考虑到它们。Capistrano 似乎正在执行 a/usr/bin/env
来创建执行远程命令的环境,但这似乎不是从.bashrc
.
让我告诉你我也在使用rvm-capistrano
(以防万一它可能有帮助)。
有什么线索吗?
我想指示 Capistrano 加载在远程服务器上定义的环境变量。我怎样才能做到这一点?
似乎当我在.bashrc
文件中导出我的环境变量时,Capistrano 没有考虑到它们。Capistrano 似乎正在执行 a/usr/bin/env
来创建执行远程命令的环境,但这似乎不是从.bashrc
.
让我告诉你我也在使用rvm-capistrano
(以防万一它可能有帮助)。
有什么线索吗?
Capistrano 实际上确实加载了.bashrc
。但在文件顶部附近,您会发现以下行之一:
# If not running interactively, don't do anything
[ -z "$PS1" ] && return
# If not running interactively, don't do anything
[[ $- != *i* ]] && return
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
如果您export
在上述行之后执行任何操作,Capistrano 将无法访问它。解决方案只是将我的设置移到这条线之上——Capistrano 可以按照我的意愿工作。
此解决方案也在此 GitHub 问题中得到了说明。
您可以通过发出以下命令将当前环境变量传递给 ssh 远程执行:
env | ssh user@host remote_program
也从这里拿了例子
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
.
Capistrano 不会加载.bashrc
,因为它不是交互式外壳。据我记得虽然它确实加载.bash_profile
了,所以你可能会使用它有更好的运气。
In Capistrano 3 it's set :default_env, { ... }
Like here:
set :default_environment, {
'env_var1' => 'value1',
'env_var2' => 'value2'
}
You can refer to this: Previous post..