python 按一天中的时间安排web dynos的数量

rekjcdws  于 11个月前  发布在  Python
关注(0)|答案(4)|浏览(101)

有没有一种方法可以使用Heroku调度程序在一天中的特定时间段启动和停止Web dynos?比如说在工作时间2个dynos,晚上只有1个dyno?
我真的很想避免把普通的用户/通行证凭证放进应用程序本身,所以我正在寻找一种安全的方法来做到这一点(除了每天为每个应用程序手动做这件事)。直接使用“heroku ps:scale web=2”自然会很好,但据我所知,这是不支持的。
感谢您发送编修。

aamkag61

aamkag611#

您可以通过创建一个使用Heroku API的脚本来按计划缩放Heroku dynos。然后在Procfile中创建一个条目,并通过Heroku dynos插件调用它。具体操作如下:
首先,你需要将'heroku' python模块添加到requirements.txt中:
Heroku==0.1.2
接下来,创建一个包含API密钥的配置变量,以便脚本可以使用该API。
heroku配置:add HEROKU_API_KEY=your_API_key_string
您可以找到您的API密钥on your heroku account page
现在你可以编写一个python脚本来扩展dynos了,下面是一个非常基本的脚本,它接受dynos的数量作为命令行参数。

import os
import sys

import heroku

"""Scale heroku web processes using the heroku python API."""

# you may want to add better argument processing, use argparse, etc.
dynos = int(sys.argv[1])
cloud = heroku.from_key(os.environ.get('HEROKU_API_KEY'))
app = cloud.apps['your_app_name']

try:
    # you may want to add a maximum dyno check here to prevent costly mistakes ;)
    webproc = app.processes['web']  
    webproc.scale(dynos)

except KeyError:
    # note: scaling to 0 dynos or attempting to scale up if 0 web dynos exist
    # both throw this error. Make sure you have at least one dyno.
    print >> sys.stderr, "Could not scale web processes - are there 0 web dynos running?"

字符串
然后你可以在Heroku的网页中定义你的整个任务,或者在你的Procfile中定义它,然后从网页中调用Procfile进程名。我更喜欢后者,因为它可以很容易地更新或更改进程,而不必登录heroku的网站。
因此,在Procfile中创建条目:

scale_up: python scale.py 2
scale_down: python scale.py 1


然后安排他们:
x1c 0d1x的数据
瞧!你的动态现在将在一天中的指定时间放大或缩小。

请注意,一旦您在Web服务器网页上创建了计划任务,您就不能编辑它运行的时间,但是如果您创建了新任务,您可以设置时间,然后删除旧任务。

**注2:**heroku python API在你尝试缩小到0 dynos,或者在当前存在0个web dynos的情况下尝试放大时,似乎会抛出KeyError。为了避免这两种情况,请不要缩小到0 dynos。

ih99xse1

ih99xse12#

它没有内置到平台中,但是应该很容易通过调度程序和使用API令牌来实现。

fcipmucu

fcipmucu3#

现在很容易做heroku插件crontogo https://elements.heroku.com/addons/crontogo
注意:这是一个付费插件,截至2021年10月仅在美国/欧洲地区提供
参考https://crontogo.com/blog/how-to-schedule-heroku-cli-commands/
设置2个作业

第一个任务“Dyno缩小”:

Cron表达:0 18 * * 1-5
Command:heroku dyno:scale web=1:Standard-1X
此作业将在工作日(周一至周五)下午6点运行,并将应用程序缩小到1个标准-1X dyno。

第二份工作“Dyno scale up”:

Cron表达:0 9 * * 1-5
Command:heroku dyno:scale web=2:Standard-1X
此作业将在工作日(周一至周五)上午9点运行,并将应用程序扩展到2个标准-1X动态。

zu0ti5jz

zu0ti5jz4#

您也可以通过heroku调度程序来完成此操作,与cron-to-go相比,heroku调度程序是免费的。只需填写[your-app-name]和[your-token]。令牌可以通过命令行界面和以下命令生成:heroku authorizations:create

curl -n -X PATCH https://api.heroku.com/apps/[your-app-name]/formation -d '{ "updates": [ { "quantity": 1, "size": "standard-1X", "type": "web" } ] }' -H "Content-Type: application/json" -H "Accept: application/vnd.heroku+json; version=3" -H "Authorization: Bearer [your-token]"

字符串

相关问题