How can I instruct Capistrano 3 to load my shell environment variables set at remote host?

后端 未结 4 1137
有刺的猬
有刺的猬 2021-02-05 16:00

I want to instruct Capistrano to load environment variables that are defined on remote server. How can I do that?

It seems that when I export my environment variables in

相关标签:
4条回答
  • 2021-02-05 16:18

    You can pass your current environment variables to a remote execution with ssh by issuing:

    env | ssh user@host remote_program
    

    Also taken the example from 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
    

    looks like you can use with set environment variables for your execution. So read your current environment variables and set them using with .

    0 讨论(0)
  • 2021-02-05 16:22

    Capistrano doesn't load .bashrc since it's not interactive shell. As far as I remember though it does load .bash_profile though so you will probably have better luck using that.

    0 讨论(0)
  • 2021-02-05 16:23

    Although this question is over six months old now, I'll leave this here in case anyone is facing this same problem.

    Capistrano actually does load .bashrc. But near the top of the file you will find:

    # If not running interactively, don't do anything
    [ -z "$PS1" ] && return
    

    If you do any exporting after that line, it will not be reached by Capistrano. The solution was simply to put my setup above this and Capistrano works how I want.

    This solution was also noted at this GitHub issue.

    0 讨论(0)
  • 2021-02-05 16:34

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

    0 讨论(0)
提交回复
热议问题