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_URL
和 REDIS_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。这不太适合应该连续 运行 的任务,但它是一个选项。
我有一个 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_URL
和 REDIS_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。这不太适合应该连续 运行 的任务,但它是一个选项。