远程 Redis 数据库出现 capistrano-resque 错误

capistrano-resque error with remote Redis DB

嘿,我正在配置我的 capistrano-resque,我有一个远程 redis 数据库。

这就是我的 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:check、deploy:check 时,出现以下错误:

INFO [1df5c9be] Running /usr/bin/env mkdir -p /tmp/mk/ as deploy@ipaddress
INFO [b91cbf1f] Running /usr/bin/env mkdir -p /tmp/mk/ as redis@//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 redis@//x: getaddrinfo: nodename nor servname provided, or not known

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

redis@//x 好像有什么东西?我在本地和生产环境中都将完整的连接字符串存储为本地环境:

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

有人知道哪里出了问题吗?

问题是您提供的是 Redis 地址而不是 SSH 地址。 Capistrano 使用 SSHKit 在服务器上执行远程 SSH 命令——无论您将角色设置为什么,都将是它使用的服务器。 role :resque_worker 行并不是我们在 capistrano-resque 中添加的任何花哨的东西,它只是为 Capistrano/SSHKit 分配另一个角色来使用(除了 Capistrano 默认包含的默认 app/web/db 角色).

换句话说,:resque_worker 设置不是指定哪个 Redis 服务器包含您的作业队列,而是指定哪个服务器用于 运行 命令,如 rake resque:work

因此在单服务器场景中,您的 :resque_worker 角色可能应该与您的 role :app ... 行相同,例如:

role :app, "me@example.com"
role :resque_worker, "me@example.com"

这样做会通过 SSH 连接到 example.comme 帐户并执行命令。

请参阅 http://capistranorb.com/documentation/getting-started/preparing-your-application/(第 4 节)以了解有关角色 defined/used 的更多信息。