【问题标题】:Heroku Procfile with multiple workersHeroku Procfile 与多个工人
【发布时间】:2021-08-12 17:10:32
【问题描述】:

我有一个带有 1 个网络测功机、7 个后台队列和 1 个时钟的应用程序。我想使用 Heroku 标准 1x 计划,因为它包括无限的后台工作人员(并且队列的数量将来可能会进一步增加)。当我部署我的应用程序时,procfile 似乎没有按照我预期的方式进行配置。显示了三个测功机,看来我必须为每个工人/时钟购买额外的标准 1x 测功机。

过程文件:

web: flask db upgrade; gunicorn webapp:app
worker: rq worker -u $REDIS_URL high default low
worker: rq worker -u $REDIS_URL r1
worker: rq worker -u $REDIS_URL r2
worker: rq worker -u $REDIS_URL bg1
worker: rq worker -u $REDIS_URL bg2
worker: rq worker -u $REDIS_URL bg3
worker: rq worker -u $REDIS_URL bg4
clock: python clock.py

Heroku 展示了 3 个 dynos:

  • 1x 网络(启用,规模:1,标准 1x)
  • 1x 工人“bg4”(规模:0)
  • 1x 时钟(刻度:0)

我应该如何构建 Procfile 以利用 Standard 1x dyno 中包含的后台工作人员?

【问题讨论】:

    标签: python python-3.x flask heroku


    【解决方案1】:

    首先,我构建 procfile 的方式存在错误。每个“工人”都应该以不同的方式命名。我认为“工人”这个词对于 Heroku 配置有一些特殊的含义。它没有。所以 Procfile 应该看起来像这样:

    web: flask db upgrade; gunicorn webapp:app
    worker1: rq worker -u $REDIS_URL high default low
    worker2: rq worker -u $REDIS_URL r1
    worker3: rq worker -u $REDIS_URL r2
    worker4: rq worker -u $REDIS_URL bg1
    foo_worker5: rq worker -u $REDIS_URL bg2
    more_worker6: rq worker -u $REDIS_URL bg3
    another_worker7: rq worker -u $REDIS_URL bg4
    clock: python clock.py
    

    其次,我的实际问题的答案(感谢 Heroku 支持团队)是每个额外的工作进程都需要一个单独的 Dyno。我觉得 Heroku 定价页面上的措辞有点误导。

    支持团队能够澄清:

    在这种情况下,“无限的后台工作人员”意味着您可以作为 您需要的许多工作进程。在较低层(免费和 hobby),可以使用的工作进程的数量是有限的。

    但是,Heroku 是基于 1-process-per-dyno 模型构建的,这意味着 每个工人都需要在自己的测功机上运行。所以你会被收取 您使用的每个工作进程都有 1 个测功机。换一种说法, 这不是“每月 25 美元的无限工作进程”,而是 “以每月 25 美元的价格运行无限的工作进程”。

    基本上,免费层最多可以有 2 个 dyno,爱好最多可以有 10 个,而生产层可以有任意数量。

    【讨论】:

      猜你喜欢
      • 2019-03-25
      • 2012-07-10
      • 1970-01-01
      • 2015-06-11
      • 1970-01-01
      • 2016-12-15
      • 1970-01-01
      • 1970-01-01
      • 2019-03-26
      相关资源
      最近更新 更多