Sidekiq 作业未在部署到 heroku 的 rails 应用程序上排队

Sidekiq jobs not queueing on rails app deployed to heroku

我有一个 rails 使用 sidekiq、sidekiq-status 和 sidekiq 批处理的应用程序:

gem "sidekiq"
gem "sidekiq-status"
# freemium version vs sidekiq pro https://github.com/breamware/sidekiq-batch
gem "sidekiq-batch"
# slim & sinatra for sidekiq monitoring
gem "sinatra", "2.0.0.beta2", require: nil

本地的时候我运行sidekiq和redis,jobs进程。 当部署到 heroku 时,作业会排队但不会处理。

我正在使用 Rediscloud 并将环境变量 REDIS_PROVIDER 设置为 REDISCLOUD_URL 并将 REDISCLOUD_URLREDIS_URL 设置为生成的 url Rediscloud 插件。

过程文件:

high_worker: DB_POOL=$SIDEKIQ_DB_POOL bundle exec sidekiq -c $SIDEKIQ_CONCURRENCY -t 8 -q high
default_worker: DB_POOL=$SIDEKIQ_DB_POOL bundle exec sidekiq -c $SIDEKIQ_CONCURRENCY -t 8 -q default
low_worker: DB_POOL=$SIDEKIQ_DB_POOL bundle exec sidekiq -c $SIDEKIQ_CONCURRENCY -t 8 -q low

当我在 heroku 上手动启动队列时,即 heroku run DB_POOL=10 bundle exec sidekiq -c 10 -t 8 -q low -a {my_app_name},队列会处理这些作业。

我的配置中缺少什么?

您的 Procfile 定义了 进程类型,但它并没有使它们成为 运行.

每种进程类型都可以 运行 在零个或多个测功机上。要更改每种过程类型的测功机数量,您可以使用 the heroku ps:scale command。例如,要将您的 low_worker 流程类型扩展为一个 dyno,您可以执行

heroku ps:scale low_worker=1

运行 dynos 需要花钱和/或消耗免费的 dyno 时间,因此请相应地进行预算。

或者,您可以拥有自己的工作 run at scheduled times via the Heroku Scheduler。这不太适合应该连续 运行 的任务,但它是一个选项。