1

下面是我的clock.py。我可以heroku run python manage.py send_queued_mail整天使用,但包含run python manage.py send_queued_mail在 clock.py 文件中会导致语法错误。

时钟.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文件运行它时失败并出现“找不到命令”错误。我可以清楚地看到它应该在的 send_queued_email.py 文件。如果我运行,python manage.py help我可以看到 1send_queued_email` 作为可用命令。不知何故,从 clock.py 运行命令导致 heroku 不喜欢该命令。

4

2 回答 2

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')
于 2014-01-24T02:08:24.010 回答
1

我终于想通了。从 python 文件调用我的命令时,我需要显式设置DJANGO_SETTINGS_MODULEmysite.settings. 以下是其他任何人的最终文件,他们希望以比 Heroku Scheduler 插件支持的每 5 分钟一次的频率更高的频率安排从 Heroku 上的 Django 应用程序发送的异步电子邮件。

# 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
于 2014-01-28T02:32:58.447 回答