按时间安排网络动态数量

时间:2012-08-14 09:15:27

标签: python django dynamic heroku

有没有办法使用Heroku调度程序在一天中的特定时段启动和停止网络动态?比如说在工作时间2 dynos和晚上只有1 dyno?

我真的想避免将普通的用户/通行证凭据放入应用程序本身,所以我正在寻找一种安全的方法来做到这一点(除了每天为每个应用程序手动完成)。直接使用“heroku ps:scale web = 2”自然会很好,但据我所知,这是不支持的。

感谢您提前获得任何反馈......

2 个答案:

答案 0 :(得分:14)

您可以通过创建使用Heroku API的脚本按计划缩放heroku dynos。然后在Procfile中创建一个条目,并通过Heroku Scheduler插件调用它。方法如下:

首先,您需要将'heroku'python模块添加到requirements.txt

  

的Heroku == 0.1.2

接下来,创建一个包含API密钥的config var,以便您的脚本可以使用API​​。

  

heroku config:添加HEROKU_API_KEY = your_api_key_string

您可以找到您的API密钥on your heroku account page

现在你将能够编写一个缩放你的dynos的python脚本。这是一个非常基本的脚本,它接受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 Scheduler网页中定义整个任务,也可以在Procfile中定义它,并从网页中调用Procfile进程名称。我更喜欢后者,因为它可以轻松更新或更改流程,而无需登录heroku的网站。

因此,在Procfile中创建条目:

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

然后安排他们:

[image]

瞧!您的dynos现在将在一天的指定时间放大或缩小。

-

请注意,在计划程序网页上创建计划任务后,您无法编辑其运行的时间,但如果您创建新任务,则可以设置时间日,然后删除旧任务。 / p>

注意2:如果你试图缩小到0 dynos,或者如果你现在存在0个dynos,那么heroku python API似乎会抛出一个KeyError。为避免两者,只需缩小为0 dynos。

答案 1 :(得分:1)

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