2014-01-24 9 views
1

我的clock.py在下面。我可以整天使用heroku run python manage.py send_queued_mail,但在clock.py文件中包括run python manage.py send_queued_mail會導致語法錯誤。爲什麼「heroku運行python manage.py send_queued_mail」是從命令行工作的,而不是在Heroku的clock.py文件中工作?

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 

編輯:從在Heroku蟒殼 management.call_command('send_queued_mail')工作,但失敗,出現「找不到命令「當我從clock.py文件運行它時出錯。我可以清楚地看到send_queued_email.py文件應該在哪裏。如果我運行python manage.py help我可以看到1send_queued_email`作爲一個可用的命令。不知怎的,從clock.py運行命令導致heroku不喜歡命令。

回答

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') 
+0

謝謝。至少沒有讓我的Heroku工人崩潰。但我仍然得到一個錯誤,如下所示:2014-01-24T02:20:31.834713 + 00:00 app [clock.1]:沒有處理程序可以找到記錄器「apscheduler.scheduler」 – user2916527

+0

我添加「從django.core。管理導入call_command 導入日誌記錄「但我仍然收到錯誤:CommandError:未知的命令:'send_queued_mail' – user2916527

+0

@ user2916527:'send_queued_mail'是一個有效的管理命令嗎?當它從命令行運行時它是否工作? – mipadi

1

我終於想通了這一點。當從python文件調用我的命令時,我需要明確設置DJANGO_SETTINGS_MODULEmysite.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 
相關問題