我的clock.py下面。我可以整天使用heroku run python manage.py send_queued_mail
,但在clock.py文件中包含run python manage.py send_queued_mail
会导致语法错误。
clock.py:
from apscheduler.scheduler import Scheduler
sched = Scheduler()
@sched.interval_schedule(minutes=1)
def timed_job():
python manage.py send_queued_mail
sched.start()
while True:
pass
Heroku错误消息(来自日志):
2014-01-24T01:31:47.256648+00:00 app[clock.1]: File "clock.py", line 7
2014-01-24T01:31:47.256648+00:00 app[clock.1]: run python manage.py send_queued_mail
2014-01-24T01:31:47.256648+00:00 app[clock.1]: ^
2014-01-24T01:31:47.256648+00:00 app[clock.1]: SyntaxError: invalid syntax
编辑:
management.call_command('send_queued_mail')
在heroku上的python shell中运行,但是当我从clock.py文件运行它时失败并出现“command not found”错误。我可以清楚地看到send_queued_email.py文件应该在哪里。如果我运行python manage.py help
,我可以看到1send_queued_email`作为可用命令。以某种方式从clock.py运行命令导致heroku不喜欢命令。
答案 0 :(得分:2)
由于
python manage.py send_queued_mail
不是有效的Python代码。
您可以使用django.core.management.call_command
以编程方式调用管理命令:
from django.core.management import call_command
call_command('send_queued_mail')
答案 1 :(得分:1)
我终于弄明白了。从python文件调用我的命令时,我需要将DJANGO_SETTINGS_MODULE
显式设置为mysite.settings
。以下是其他任何人决定要从Heroku上的Django应用程序安排异步电子邮件发送的最终文件,其频率高于Heroku Scheduler附加组件支持的每5分钟一次。
# clock.py
import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'anonqaproject.settings'
from apscheduler.scheduler import Scheduler
from post_office import utils
sched = Scheduler()
@sched.interval_schedule(minutes=1)
def timed_job():
utils.send_queued_mail()
sched.start()
while True:
pass