2015-04-06 70 views
0

嘿,我正在配置我的capistrano-resque,並且我有一個遠程redis數據庫。capistrano-resque error with remote Redis DB

這是我的Capistrano的-resque配置的外觀在deploy.rb:

set :resque_environment_task, true 
role :resque_worker, ENV['REDIS_SERVER'] 
role :resque_scheduler, ENV['REDIS_SERVER'] 
set :workers, { "*" => 1 } 

當我嘗試運行帽生產的git:檢查,部署:檢查我收到以下錯誤:

INFO [1df5c9be] Running /usr/bin/env mkdir -p /tmp/mk/ as [email protected] 
INFO [b91cbf1f] Running /usr/bin/env mkdir -p /tmp/mk/ as [email protected]//x 
DEBUG [1df5c9be] Command: /usr/bin/env mkdir -p /tmp/mk/ 
DEBUG [b91cbf1f] Command: /usr/bin/env mkdir -p /tmp/mk/ 
(Backtrace restricted to imported tasks) 
cap aborted! 
SSHKit::Runner::ExecuteError: Exception while executing as [email protected]//x: getaddrinfo: nodename nor servname provided, or not known 

SocketError: getaddrinfo: nodename nor servname provided, or not known 

似乎有什麼與redis @ // x?我有本地和生產存儲爲本地ENV完整的連接字符串:

redis://x:[password]@aws-eu-west.0.dblayer.com:10156 

任何人有什麼地方不對勁的想法?

回答

1

問題是您提供的是Redis地址而不是SSH地址。 Capistrano使用SSHKit在服務器上執行遠程SSH命令 - 無論你設置的角色是它使用的服務器。 role :resque_worker行不是我們在capistrano-resque中添加的任何內容,它只是爲Capistrano/SSHKit分配另一個角色(除默認情況下默認包含Capistrano包含的默認應用程序/ web/db角色外)。

換句話說,:resque_worker設置不是指定哪個Redis服務器包含您的作業隊列,而是指定運行命令的服務器,如rake resque:work

因此,在一個單一的服務器環境,你:resque_worker角色也許應該是一樣的role :app ...線,例如:

role :app, "[email protected]" 
role :resque_worker, "[email protected]" 

這樣做在example.com通過SSH將連接到me帳戶和執行命令。

有關角色如何定義/使用的更多信息,請參閱http://capistranorb.com/documentation/getting-started/preparing-your-application/(第4節)。