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?"
4条答案
按热度按时间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的数量作为命令行参数。
字符串
然后你可以在Heroku的网页中定义你的整个任务,或者在你的Procfile中定义它,然后从网页中调用Procfile进程名。我更喜欢后者,因为它可以很容易地更新或更改进程,而不必登录heroku的网站。
因此,在Procfile中创建条目:
型
然后安排他们:
x1c 0d1x的数据
瞧!你的动态现在将在一天中的指定时间放大或缩小。
请注意,一旦您在Web服务器网页上创建了计划任务,您就不能编辑它运行的时间,但是如果您创建了新任务,您可以设置时间,然后删除旧任务。
**注2:**heroku python API在你尝试缩小到0 dynos,或者在当前存在0个web dynos的情况下尝试放大时,似乎会抛出KeyError。为了避免这两种情况,请不要缩小到0 dynos。
ih99xse12#
它没有内置到平台中,但是应该很容易通过调度程序和使用API令牌来实现。
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动态。
zu0ti5jz4#
您也可以通过heroku调度程序来完成此操作,与cron-to-go相比,heroku调度程序是免费的。只需填写[your-app-name]和[your-token]。令牌可以通过命令行界面和以下命令生成:
heroku authorizations:create
字符串