【问题标题】:capistrano-resque error with remote Redis DB远程 Redis DB 的 capistrano-resque 错误
【发布时间】:2015-04-06 12:35:13
【问题描述】:

嘿,我正在配置我的 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 production 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 

有人知道出了什么问题吗?

【问题讨论】:

    标签: ruby-on-rails capistrano


    【解决方案1】:

    问题在于您提供的是 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 节)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-29
      • 2015-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-26
      • 1970-01-01
      相关资源
      最近更新 更多