2010-02-17 4 views
0

내 dev 노트북 (Mac OS X)에서 cron을 통해 매 5 분마다 장고 스크립트를 실행하려고합니다.Django + Unix Cron, django.db를 가져올 수 없습니다.

import sys 
import os 

def setup_environment(): 
    pathname = os.path.dirname(sys.argv[0]) 
    sys.path.append(os.path.abspath(pathname)) 
    sys.path.append(os.path.normpath(os.path.join(os.path.abspath(pathname), '../'))) 
    os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' 

setup_environment() 


from common.models import TweetCache 
import datetime 

def main(): 
    print "(%s) Caching tweets..." % str(datetime.datetime.now()) 
    previous_tweets = TweetCache.objects.filter(username='atmospherian') 
    for prev in previous_tweets: 
     prev.delete() 

    import twitter 

    api = twitter.Api() 
    tweets = api.GetUserTimeline('atmospherian') 
    for t in tweets: 
     tc = TweetCache(username='atmospherian', date=t.created_at, text=t.text) 
     tc.save() 

if __name__ == '__main__': 
    main() 

의 crontab : 시스템에서

*/5 * * * * 파이썬 /absolute/path/to/tweet_cache.py

오류 다음 스크립트의 코드는 mail :

X-Cron-Env: <SHELL=/bin/sh> 
X-Cron-Env: <PATH=/usr/bin:/bin> 
X-Cron-Env: <LOGNAME=jason> 
X-Cron-Env: <USER=jason> 
X-Cron-Env: <HOME=/Users/jason> 
Date: Tue, 16 Feb 2010 17:45:00 -0500 (EST) 

Traceback (most recent call last): 
    File "/Users/jason/Development/bandistry/tweet_cache.py", line 22, in <module> 
    from common.models import TweetCache 
    File "/Users/jason/Development/bandistry/common/models.py", line 1, in <module> 
    from django.db import models 
ImportError: No module named django.db 

아무도 내가 무슨 일을 잘못하고 있다고 말할 수 있습니까?

답변

1

sys.argv[0]이 항상 현재 파일의 경로를 가져 오는 가장 신뢰할 수있는 방법은 아닙니다.

pathname = os.path.dirname(os.path.abspath(__file__)) 
sys.path.insert(0, pathname) 
sys.path.insert(0, os.path.abspath(os.path.join(pathname, '..'))) 

주 대신 sys.path.append의 sys.path.insert의 사용, 파일의 사용 :이 수정을 권장합니다. 또한 파일에 abspath을 사용하면 파일 이름 전체를 빈 문자열 또는 단순히 '.'로 줄일 수 있습니다. 심지어 정확하지 않을 수도 있습니다.

또한 추가하는 두 경로 중 하나에 django 패키지가 설치되어 있습니까? 그렇지 않다면, 당신은 창문이 필요 장고 수입 문제로 아마 관련이없는 그 경로 마지막으로

, 작은 경구를 추가,하지만 당신은 정말 일을해야한다 :

os.environ['DJANGO_SETTINGS_MODULE'] = 'bandistry.settings' 

그것은없이 작동 할 수 있지만 그것은 더 나은 만약 당신이 패키지에 전체 장고 응용 프로그램을 넣어. 이렇게하면 다른 패키지 이름을 가려 낼 기회가 줄어 듭니다.

+0

내 장고 설치 경로는 다음과 같습니다. /Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django? –

+0

트릭을 했어, 난 cron이 시스템과 독립적으로 PATH를 지정해야하는 자체 환경을 생성하는 것 같아 경로에 장고가없는 것 같아요. –

관련 문제