事情在sidekiq中排队,但没有在heroku中执行

时间:2018-03-31 12:34:55

标签: ruby-on-rails heroku sidekiq

所以在用户注册后,我正在做两件事

1)发送欢迎电子邮件 2)将他们的facebook个人资料照片更新到我的s3

  if user.save

    UpdateAvatarWorker.perform_async(user.id)


    UserMailer.welcome_email(user).deliver_later unless user.email.nil?

    render json: {

      status: 200
    }
  else
    render json: { errors: user.errors.messages, status: 500 }
  end

现在在sidekiq网页用户界面中,我看到这些工作已经入队但未安排

以下是我的配置

config/sidekiq.yml

development:
  :concurrency: 5
production:
  :concurrency: 10

config/initializers/sidekiq.rb

require 'sidekiq'
require 'sidekiq/web'

if Rails.env.production?

  Sidekiq.configure_client do |config|
    config.redis = { size: 2 }
  end

  Sidekiq.configure_server do |config|
    config.redis = { size: 10 }
  end

end

Procfile

web: bundle exec rails server -p $PORT
worker: bundle exec sidekiq -c 10 -v -t 25 -q default -q mailers

config/initializers/redis.rb

uri = URI.parse(ENV['REDISTOGO_URL']) || "redis://localhost:6379/"
REDIS = Redis.new(url: uri)

我在heroku redis go中使用迷你计划,该计划与redis有50个连接

redistogo (redistogo-objective-72231) mini $9/month created └─ as REDISTOGO

工人似乎总是处于崩溃模式

➜  couch_bunny git:(master) heroku ps --app couchbunny
=== run: one-off processes (1)
run.9503 (Standard-1X): up 2018/03/31 17:20:00 +0530 (~ 41m ago): rails console

=== web (Standard-1X): bundle exec rails server -p $PORT (1)
web.1: up 2018/03/31 17:31:03 +0530 (~ 30m ago)

=== worker (Standard-1X): bundle exec sidekiq -c 10 -v -t 25 -q default -q mailers (1)
worker.1: crashed 2018/03/31 17:47:20 +0530 (~ 14m ago)

enter image description here

1 个答案:

答案 0 :(得分:1)

您通过10手动设置了Sidekiq.configure_server的游戏区大小,并且您正在以10的并发性启动Sidekiq。在内部,Sidekiq要求池至少有concurrency + 2个连接,这就是错误的来源。

Mike suggests不要手动设置size选项,而要让Sidekiq这样做。对于10的并发性,它会自动将池大小设置为10 + 5 = 15

相关问题