2017-04-25 58 views
0

所以,問題不在於少見的,到目前爲止我已經收集的問題負載關於它的了,不過,沒有能夠解決這個我自己Capistrano的+ sidekiq /無法挑環境變量

我有以下任務:

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 

任務正在內namespace :deploy do ... end主deploy.rb文件

由於我的數據庫creds'在〜/ .profile中,sidekiq不能存儲在遠程計算機上稱爲運行的東西(我試圖把這些環境變量〜/ .bashrc等等......可能已經存在或在發現的問題中命名的任何點文件......沒有任何工作)。我幾乎可以做任何事情。

顯然,如果我在遠程計算機上運行_very_相同的命令,而不是通過capistrano,那麼一切正常。我結束了這個可憐的一個:

task :start do 
    run_locally do 
    %x(ssh [email protected]#{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 

這就是說,如果錯誤的聲音對一些誰使用常規execute :bundle, '...sidekiq startup cmd...'沒有這種問題明顯;感謝一個大型的很多提前任何幫助

最佳

+0

您正在運行什麼樣的服務器? – DevJem

+0

我猜沒有什麼奇怪的,ubuntu 16.04 – Ben

回答

2

如果您正在運行Ubuntu,請將光標置於的頂部處,以便將其輸出到~/.bashrc

下面是從一臺機器運行Ubuntu 14.04的例子:

# ~deployer/.bashrc 
export HELLO=world 

爲了證明,我有一個Capistrano的任務簡單地打印環境:

task :env do 
    on roles(:all) do 
    execute "env" 
    end 
end 

當我運行它,你可以看到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 [email protected] 2.131s 

對於其他Capistrano兼容的方法來將環境變量傳遞給Ruby進程,請參閱此答案:https://stackoverflow.com/a/39628182/4625365

+0

應該突出顯示Capistrano文檔使用bashrc(:!我昨天做過的問我最後在你的鏈接文章上,但我想我可能忘了簡單地源碼.bashrc ...無論如何,現在運行良好。 – Ben

0

我碰到的這個問題之前,這是因爲Capistrano的使用非登錄,非交互的shell。因此,當您部署應用程序時,它根本不觸及.bash_rc或.profile文件,並且sidekiq將無法訪問您的env vars。你可以找到更多關於那個in the Capistrano docs的信息。使用獨角獸,我不得不把我的環境變量放在/etc/default/unicorn,所以我知道他們會來源。根據您使用的內容,您應該在部署應用時發現您知道的配置文件會被觸及。

+0

是的,我已經檢查了底部架構了;但仍然......就像你爲獨角獸做的那樣,我可以把它們放在乘客裏,或者像那樣;但作爲sidekiq開始作爲一個副命令通過捆綁,我很不幸運,我沒有看到很多在哪裏設置 – Ben