capistrano + sidekiq /无法选择环境变量

Ben*_*Ben 2 ruby deployment capistrano ruby-on-rails capistrano3

因此,到目前为止,问题并不少见,但我仍然无法自行解决。

我有以下任务:

namespace :sidekiq do
      task :start do
        on roles(:app), in: :sequence, wait: 5 do
          within release_path do
            as :deploy  do
              with rails_env: fetch(:rails_env) do
                execute :bundle, "exec sidekiq -e production -C ./config/sidekiq.yml -L ./log/sidekiq.log -d"
              end
            end
          end
        end
      end
end
Run Code Online (Sandbox Code Playgroud)

namespace :deploy do ... end在主deploy.rb文件中调用该任务

由于我的数据库凭据存储在〜/ .profile中的远程计算机上,因此sidekiq无法运行(我试图将这些环境变量放在〜/ .bashrc中,依此类推……无论发现问题…无济于事。我几乎已经做了一切可能的事情。

显然,如果我在远程计算机上而不是通过capistrano 运行_very_相同的命令,则一切运行正常。我最终遇到了这个可怜的人:

task :start do
  run_locally do
    %x(ssh deploy@#{fetch(:application)} 'cd /var/www/#{fetch(:application)}/current && /home/xx/.rvm/bin/rvm 2.4.0 do bundle exec sidekiq -e production -C /var/www/#{fetch(:application)}/current/config/sidekiq.yaml -L /var/www/#{fetch(:application)}/current/log/sidekiq.log -d')
   end
end
Run Code Online (Sandbox Code Playgroud)

就是说,如果对于那些execute :bundle, '...sidekiq startup cmd...'没有这种问题的普通人来说,错误听起来很明显;提前非常感谢您的任何帮助

最好

Mat*_*son 5

如果您正在运行Ubuntu,你就应该能够通过将它们在环境变量export 极顶~/.bashrc

这是运行Ubuntu 14.04的计算机上的示例:

# ~deployer/.bashrc
export HELLO=world
Run Code Online (Sandbox Code Playgroud)

为了演示,我有一个Capistrano任务,它简单地打印环境:

task :env do
  on roles(:all) do
    execute "env"
  end
end
Run Code Online (Sandbox Code Playgroud)

当我运行它时,您可以看到HELLO=world确实在预期的环境中:

$ cap production env
00:00 env
      01 env
      01 XDG_SESSION_ID=328
      01 SHELL=/bin/bash
      01 HELLO=world
      01 SSH_CLIENT=xx.xx.xx.xx 16582 22
      01 USER=deployer
      01 SSH_AUTH_SOCK=/tmp/ssh-Twu5TDVnXb/agent.32558
      01 MAIL=/var/mail/deployer
      01 PATH=/home/deployer/.rbenv/shims:/home/deployer/.rbenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/b…
      01 PWD=/home/deployer
      01 LANG=en_US.UTF-8
      01 RBENV_SHELL=bash
      01 SHLVL=1
      01 HOME=/home/deployer
      01 LOGNAME=deployer
      01 SSH_CONNECTION=xx.xx.xx.xx 16582 xx.xx.xx.xx 22
      01 XDG_RUNTIME_DIR=/run/user/1000
      01 _=/usr/bin/env
    ? 01 deployer@xx.xx.xx.xx 2.131s
Run Code Online (Sandbox Code Playgroud)

有关将环境变量传递给Ruby进程的其他Capistrano兼容方式,请参见以下答案:https : //stackoverflow.com/a/39628182/4625365