嘿我配置我的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 }
当我尝试运行cap生产git时:检查,部署:检查我收到以下错误:
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
任何人都知道错误是什么?
答案 0 :(得分:1)
问题是您提供的是Redis地址而不是SSH地址。 Capistrano使用SSHKit在服务器上执行远程SSH命令 - 无论您设置什么角色,角色都将是它使用的服务器。 role :resque_worker
行并不是我们在capistrano-resque
中添加的任何内容,它只是为Capistrano / SSHKit分配另一个角色(除了默认的app / web / db角色) Capistrano默认包括。)
换句话说,:resque_worker
设置不能指定哪个Redis服务器包含您的作业队列,而是指定运行rake resque:work
等命令的服务器。< / p>
因此,在单服务器方案中,您的:resque_worker
角色应该与您的role :app ...
行相同,例如:
role :app, "me@example.com"
role :resque_worker, "me@example.com"
这样做会通过SSH连接到me
的{{1}}帐户并执行命令。
有关如何定义/使用角色的更多信息,请参阅http://capistranorb.com/documentation/getting-started/preparing-your-application/(第4节)。