新手问题 Sidekiq 启动问题

u1453357893 · 2016年07月17日 · 最后由 FrankFang 回复于 2016年07月19日 · 3914 次阅读

我的 sidekiq.yml 文件如下:

:verbose: false
:pidfile: ./tmp/pids/sidekiq.pid
:logfile: ./log/sidekiq.log # 输出的日志地址
:queues:
  - [phoenix_job,7]
  - [default, 2] # 写在队列参数中的, 表示让 sidekiq 处理这个 queue

staging:
  :concurrency: 5
development:
  :concurrency: 5
production:
  :concurrency: 50

初始化 sidekiq 和 redis 的文件 sidekiq.rb 的文件如下:

instance = Redis.new(
  { :host => "#{ENV['REDIS_SERVER_ADDRESS']}",
    :port => ENV['REDIS_SERVER_PORT'],
    :db => 0,
    :password => "#{ENV['REDIS_PASSWORD']}",
    :driver => :hiredis
  })

Sidekiq.configure_server do |config|
  config.redis = Redis::Namespace.new("kalading/#{Rails.env}", redis: instance, :namespace => "sidekiq_redis")
end

现在执行:bundle exec sidekiq -C config/sidekiq.yml报如下错误 redis 也尝试重启了几次,就是不知道问题出在了哪里,新手第一次用求解

没人搭理哎

善用 stackoverflow 😄

#3 楼 @xworm 查不到才在这里发帖的😂 😂 😂

Redis::Namespace.new("kalading/#{Rails.env}", redis: instance) 这样试试,第一个参数就是 namespace 吧

#5 楼 @w7938940 貌似又报了这样一个问题

Redis::Namespace.new("kalading/#{Rails.env}", redis: instance) 肯定是这个地方错了

#7 楼 @hanluner 😄 这种摸不着头绪的 bug,只能从仅有的 code 里边儿猜了😂 。起初我以为是 redis 密码的问题,初始化这个文件的时候也反复重启了 redis 发现没有问题,然后就没办法了

Redis::Namespace.new 的第二参数处理里面,并没有对 :namespace 的处理,不知道你这个参数是干什么用的

def initialize(namespace, options = {})
      @namespace = namespace
      @redis = options[:redis] || Redis.current
      @warning = !!options.fetch(:warning) do
                   !ENV['REDIS_NAMESPACE_QUIET']
                 end
      @deprecations = !!options.fetch(:deprecations) do
                        ENV['REDIS_NAMESPACE_DEPRECATIONS']
                      end
    end

顺便说一下 redis: instance, :namespace => "sidekiq_redis" 这种混搭的写法,看上去很不舒服

#9 楼 @xworm 就是把 namespace 给删了还是报同样的问题,我再仔细推敲一下吧

#10 楼 @u1453357893 肯定是报同样的错啊,那个参数有没有也不影响,只是你写得没意义而已 我是想提醒你 第一个参数才是 namespace,你到底是想用什么值来做 namespace 呢? 感觉你的问题是在 redis 连接这块,在 console 里面调试下 namespace 看看能用不咯

#6 楼 @u1453357893 现在报的是新的问题,你连接 redis 时配置了密码,但是你的 redis 并没有设置密码,所以会有 NOAUTH Authentication required 这个错误,可以把:password => "#{ENV['REDIS_PASSWORD']}" 这行去掉或者在 reidis 的配置里面设置一个密码。

问题已解决:

Sidekiq.configure_server do |config|
  config.redis = { url: "redis://#{ENV['REDIS_SERVER_ADDRESS']}:#{ENV['REDIS_SERVER_PORT']}/0",
                   password: "#{ENV['REDIS_PASSWORD']}",
                   namespace: "kalading-sidekiq/#{Rails.env}",
                   driver: :hiredis }
end

问题在于:config.redis 返回的是一个 block😂 😂 😂

需要 登录 后方可回复, 如果你还没有账号请 注册新账号