【发布时间】:2014-05-04 12:24:56
【问题描述】:
嗨 sidekiq / ruby / redis 专家:
我不确定这个问题是否与 sidekiq、redis、ruby 甚至 rails 有关。
我们正在尝试在我们的开发服务器上启动 sidekiq(实际上距离 prod 一步之遥,因此我们在 prod 模式下使用 rails),并且 sidekiq 日志不断产生错误消息:
获取消息时出错:参数无效 - connect(2)
日志的相关部分如下:
# Logfile created on 2014-04-30 15:57:05 -0400 by logger.rb/31641
Running in ruby 1.9.3p484 (2013-11-22) [i386-mingw32]
See LICENSE and the LGPL-3.0 for licensing details.
Starting processing, hit Ctrl-C to stop
{:queues=>["default"], :concurrency=>25, :require=>".", :environment=>"production", :timeout=>8, :error_handlers=>[#<Sidekiq::ExceptionHandler::Logger:0xef8410>], :lifecycle_events=>{:startup=>[], :quiet=>[], :shutdown=>[]}, :strict=>true, :tag=>"price_tracker_rewrite"}
Booting Sidekiq 3.0.0 with redis options {}
Error fetching message: Invalid argument - connect(2)
E:/Rewrite/Ruby193/lib/ruby/gems/1.9.1/gems/redis-3.0.7/lib/redis/connection/ruby.rb:129:in `connect_nonblock'
E:/Rewrite/Ruby193/lib/ruby/gems/1.9.1/gems/redis-3.0.7/lib/redis/connection/ruby.rb:129:in `rescue in connect_addrinfo'
E:/Rewrite/Ruby193/lib/ruby/gems/1.9.1/gems/redis-3.0.7/lib/redis/connection/ruby.rb:121:in `connect_addrinfo'
E:/Rewrite/Ruby193/lib/ruby/gems/1.9.1/gems/redis-3.0.7/lib/redis/connection/ruby.rb:162:in `block in connect'
E:/Rewrite/Ruby193/lib/ruby/gems/1.9.1/gems/redis-3.0.7/lib/redis/connection/ruby.rb:160:in `each'
E:/Rewrite/Ruby193/lib/ruby/gems/1.9.1/gems/redis-3.0.7/lib/redis/connection/ruby.rb:160:in `each_with_index'
E:/Rewrite/Ruby193/lib/ruby/gems/1.9.1/gems/redis-3.0.7/lib/redis/connection/ruby.rb:160:in `connect'
E:/Rewrite/Ruby193/lib/ruby/gems/1.9.1/gems/redis-3.0.7/lib/redis/connection/ruby.rb:211:in `connect'
E:/Rewrite/Ruby193/lib/ruby/gems/1.9.1/gems/redis-3.0.7/lib/redis/client.rb:285:in `establish_connection'
E:/Rewrite/Ruby193/lib/ruby/gems/1.9.1/gems/redis-3.0.7/lib/redis/client.rb:79:in `block in connect'
E:/Rewrite/Ruby193/lib/ruby/gems/1.9.1/gems/redis-3.0.7/lib/redis/client.rb:257:in `with_reconnect'
E:/Rewrite/Ruby193/lib/ruby/gems/1.9.1/gems/redis-3.0.7/lib/redis/client.rb:78:in `connect'
E:/Rewrite/Ruby193/lib/ruby/gems/1.9.1/gems/redis-3.0.7/lib/redis/client.rb:240:in `with_socket_timeout'
E:/Rewrite/Ruby193/lib/ruby/gems/1.9.1/gems/redis-3.0.7/lib/redis/client.rb:178:in `call_with_timeout'
E:/Rewrite/Ruby193/lib/ruby/gems/1.9.1/gems/redis-3.0.7/lib/redis.rb:1038:in `block in _bpop'
E:/Rewrite/Ruby193/lib/ruby/gems/1.9.1/gems/redis-3.0.7/lib/redis.rb:37:in `block in synchronize'
E:/Rewrite/Ruby193/lib/ruby/1.9.1/monitor.rb:211:in `mon_synchronize'
E:/Rewrite/Ruby193/lib/ruby/gems/1.9.1/gems/redis-3.0.7/lib/redis.rb:37:in `synchronize'
E:/Rewrite/Ruby193/lib/ruby/gems/1.9.1/gems/redis-3.0.7/lib/redis.rb:1035:in `_bpop'
E:/Rewrite/Ruby193/lib/ruby/gems/1.9.1/gems/redis-3.0.7/lib/redis.rb:1080:in `brpop'
E:/Rewrite/Ruby193/lib/ruby/gems/1.9.1/gems/sidekiq-3.0.0/lib/sidekiq/fetch.rb:101:in `block in retrieve_work'
E:/Rewrite/Ruby193/lib/ruby/gems/1.9.1/gems/connection_pool-2.0.0/lib/connection_pool.rb:58:in `with'
E:/Rewrite/Ruby193/lib/ruby/gems/1.9.1/gems/sidekiq-3.0.0/lib/sidekiq.rb:69:in `redis'
E:/Rewrite/Ruby193/lib/ruby/gems/1.9.1/gems/sidekiq-3.0.0/lib/sidekiq/fetch.rb:101:in `retrieve_work'
E:/Rewrite/Ruby193/lib/ruby/gems/1.9.1/gems/sidekiq-3.0.0/lib/sidekiq/fetch.rb:36:in `block in fetch'
E:/Rewrite/Ruby193/lib/ruby/gems/1.9.1/gems/sidekiq-3.0.0/lib/sidekiq/util.rb:15:in `watchdog'
E:/Rewrite/Ruby193/lib/ruby/gems/1.9.1/gems/sidekiq-3.0.0/lib/sidekiq/fetch.rb:32:in `fetch'
E:/Rewrite/Ruby193/lib/ruby/gems/1.9.1/gems/celluloid-0.15.2/lib/celluloid/calls.rb:25:in `public_send'
E:/Rewrite/Ruby193/lib/ruby/gems/1.9.1/gems/celluloid-0.15.2/lib/celluloid/calls.rb:25:in `dispatch'
E:/Rewrite/Ruby193/lib/ruby/gems/1.9.1/gems/celluloid-0.15.2/lib/celluloid/calls.rb:122:in `dispatch'
E:/Rewrite/Ruby193/lib/ruby/gems/1.9.1/gems/celluloid-0.15.2/lib/celluloid/actor.rb:322:in `block in handle_message'
E:/Rewrite/Ruby193/lib/ruby/gems/1.9.1/gems/celluloid-0.15.2/lib/celluloid/actor.rb:416:in `block in task'
E:/Rewrite/Ruby193/lib/ruby/gems/1.9.1/gems/celluloid-0.15.2/lib/celluloid/tasks.rb:55:in `block in initialize'
E:/Rewrite/Ruby193/lib/ruby/gems/1.9.1/gems/celluloid-0.15.2/lib/celluloid/tasks/task_fiber.rb:13:in `block in create'
我的同事和我真的无处可去,谷歌也没有任何帮助。感谢您的帮助!
更新:我正在使用以下行执行 sidekiq:“sidekiq -e production”,因为这本质上是我们产品的镜像。我也没有 sidekiq 配置文件(sidekiq.yml),也许我需要一个?真的不确定,但它在测试过程中对我们很有效。我们也在 Windows 环境中执行 sidekiq,以防万一。
【问题讨论】:
-
你能提供你的sidekiq配置和你的启动线(例如
bundle exec sidekiq -e ...) -
您更新的信息没有想到,但是由于这是一个 redis 连接问题,这可能源于您的 sidekiq.rb 和 redis.rb 初始化程序。接下来我可以提供一些建议,但最好先看看这些文件。
-
@blootto 根本没有 sidekiq.rb 和 redis.rb 自定义初始化程序。我们只需启动已安装的 redis 服务器(作为服务),然后使用我上面提到的命令运行 sidekiq(开箱即用,如果你愿意的话)。在我们的测试环境中一切正常,现在它在 dev/prod 上给出了这个错误。
-
我建议尝试使用一些初始化程序。它不会受到伤害,并且可以确保您在任何环境中对您的配置有更明显的控制。我将在答案中添加一些建议以开始
标签: ruby-on-rails ruby redis sidekiq