2015-04-06 47 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节)。