如何指示Capistrano 3加载我在远程主机上设置的shell环境变量?

时间:2014-08-25 05:08:18

标签: ruby capistrano3 rvm-capistrano

我想指示Capistrano加载在远程服务器上定义的环境变量。我怎么能这样做?

似乎当我在.bashrc文件中导出我的环境变量时,Capistrano不会考虑它们。 Capistrano似乎正在执行/usr/bin/env来创建执行远程命令的环境,但这似乎并没有从.bashrc加载环境变量。

我也告诉你,我也在使用rvm-capistrano(以防它可能有所帮助)。

有任何线索吗?

4 个答案:

答案 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..