2014-04-19 23 views
0

使用Capistrano 2.15rbenv配置/部署/ production.rb有:Capistrano的2 delayed_job的任務未能使用RBEnv配置的紅寶石

set :bundle_flags, "--deployment --quiet --binstubs" 
set :default_environment, { 
    'RAILS_ENV' => 'production', 
    'RBENV_ROOT' => "$HOME/.rbenv", 
    'PATH' => "$RBENV_ROOT/shims:$RBENV_ROOT/bin:$PATH" 
} 

配置/ deploy.rb測試任務紅寶石環境和版本:

# Test Ruby Environment 
desc "Test Ruby Environment" 
task :test_ruby_environment, :roles => :app do 
    run "env; ruby -v" 
end 

cap test_ruby_environment的輸出將省略的路徑中$ RBENV_ROOT目錄:

** [out :: ex.org] RBENV_ROOT=/home/app/.rbenv 
** [out :: ex.org] PATH=/shims:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games 

當我需要通過rbenv配置的紅寶石 的delayed_job(3.0.5)守護程序運行的系統紅寶石。這方面的證據是一個錯誤跟蹤從delayed_job的:

/home/app/shared/bundle/ruby/1.8/gems/delayed_job-3.0.5/lib/delayed/backend/base.rb:95:in `invoke_job' 

這說明系統安裝1.8寶石來源。

爲什麼這不拾取rbenv配置的紅寶石?

回答

0

嗯,事實證明,因爲:default_environment是一個哈希,Capistrano的並不一定產生爲了環境設置。

在RBENV_ROOT之前生成PATH設置時,PATH中使用的環境變量爲空。

的解決方案是不依賴於RBENV_ROOT在PATH:

set :bundle_flags, "--deployment --quiet --binstubs" 
set :rbenv_root, '$HOME/.rbenv' 
# be careful, these might not play back in order written 
set :default_environment, { 
    'RAILS_ENV' => 'production', 
    'RBENV_ROOT' => fetch(:rbenv_root), 
    'PATH' => "#{fetch(:rbenv_root)}/shims:#{fetch(:rbenv_root)}/bin:$PATH" 
} 

現在輸出有:

** [out :: ex.org] RBENV_ROOT=/home/app/.rbenv 
** [out :: ex.org] PATH=/home/app/.rbenv/shims:/home/app/.rbenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games 

而且delayed_job的任務與rbenv配置的紅寶石運行。

相關問題