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シェルから動作しますが、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_MODULEする必要がありましたmysite.settings。以下は、Heroku スケジューラ アドオンでサポートされている 5 分ごとに 1 回よりも高い頻度で、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 に答える