Как я могу проинструктировать Capistrano 3 для загрузки переменных оболочки оболочки, установленных на удаленном хосте?

Я хочу проинструктировать Capistrano загрузить переменные среды, которые определены на удаленном сервере. Как я могу это сделать?

Похоже, что когда я экспортирую переменные среды внутри файла .bashrc, они не учитываются Capistrano. Кажется, что Capistrano выполняет /usr/bin/env для создания среды для выполнения удаленных команд, но это, похоже, не загружает переменные среды из .bashrc.

Позвольте мне также сказать, что я использую rvm-capistrano тоже (на всякий случай это может помочь).

Любая подсказка?

Ответ 1

Хотя этот вопрос уже более шести месяцев, я оставлю это здесь, если кто-то столкнется с этой проблемой.

Капистрано действительно загружает .bashrc. Но в верхней части файла вы найдете:

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

Если вы выполните export ing после этой строки, это не будет достигнуто Capistrano. Решение было просто поставить мою настройку выше этого, и Капистрано работает, как я хочу.

Это решение было также отмечено в этом выпуске GitHub.

Ответ 2

Capistrano не загружает .bashrc, так как это не интерактивная оболочка. Насколько я помню, хотя он загружает .bash_profile, хотя вам, вероятно, повезет с этим.

Ответ 3

Вы можете передать текущие переменные среды на удаленное выполнение с помощью ssh, выпустив:

env | ssh [email protected] 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.

Ответ 4

В Capistrano 3 it set :default_env, { ... }

Как здесь:

set :default_environment, { 
  'env_var1' => 'value1',
  'env_var2' => 'value2'
}

Вы можете обратиться к этому: Предыдущее сообщение..