我在Heroku中使用Django,在我的网站上,我每个月都通过Celery发送批量电子邮件。由于我一个月只用一次这个工人,我不想一直付钱。我可以停止工作人员使用heroku scale workers=0
,并在我发送电子邮件前后手动使用heroku scale workers=1
将其放大。
然而,由于其他非技术人员也会从django发送电子邮件,他们无法运行这些命令。我可以通过在我的Heroku web进程中执行Python中的命令来停止工作人员吗?我可以在发送电子邮件之前执行任何命令。
heroku.py有一个错误,请参阅问题:https://github.com/heroku/heroku.py/issues/10和https://github.com/heroku/heroku.py/issues/4
我做了一个快速的变通办法,它直接使用http资源:
cloud = heroku.from_key(settings.HEROKU_APIKEY)
cloud._http_resource(method='POST',
resource=('apps', 'appnane', 'ps', 'scale'),
data={'type': 'processname', 'qty': 1})
cloud._http_resource(method='POST', resource=('apps', 'appname', 'ps', 'scale'), data={'type': 'processname', 'qty': 0})
您可以使用python api客户端heroku.py来完成此操作。它在PyPi上可用,源代码位于https://github.com/heroku/heroku.py
你也可以使用调度器插件,并有一个计划每月运行一次的命令来发送你的电子邮件,而不必扩大流程。