2012-07-30 1 views
0

나는 settings.py에서 /myproject/myapp/routers.py장고 CLI 스크립트 및 데이터베이스 라우터 :</p> <pre><code>from django.db import connections DATABASE_ROUTERS = ['myproject.myapp.routers.ShardingRouter',] </code></pre> <p>이것은 정상적인 잘 작동 : 이름 연결을 가져올 수는

class ShardingRouter(object): 

    def db_for_read(self, model, **hints): 
     return 'default' 

    def db_for_write(self, model, **hints): 
     return 'default' 

    def allow_relation(self, obj1, obj2, **hints): 
     return None 

    def allow_syncdb(self, db, model): 
     return None 

내가 가진 파일에 myapp 응용 프로그램 에 대한 데이터베이스 ruter했다 응용 프로그램은 wsgi를 통해 실행되지만 하나의 CLI 스크립트 /myproject/parser_jobs.py은 cron 또는 CLI에서 수동으로 시작합니다.

이 settings.py를 발견처럼

Traceback (most recent call last): 
    File "/hosting/myproject/myproject/parser_jobs.py", line 20, in <module> 
    import settings 
    File "/hosting/myproject/myproject/settings.py", line 46, in <module> 
    from django.db import connections 
    File "/usr/local/lib/python2.7/dist-packages/django/db/__init__.py", line 11, in <module> 
    if DEFAULT_DB_ALIAS not in settings.DATABASES: 
    File "/usr/local/lib/python2.7/dist-packages/django/utils/functional.py", line 184, in inner 
    self._setup() 
    File "/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py", line 42, in _setup 
    self._wrapped = Settings(settings_module) 
    File "/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py", line 95, in __init__ 
    raise ImportError("Could not import settings '%s' (Is it on sys.path?): %s" % (self.SETTINGS_MODULE, e)) 
ImportError: Could not import settings 'myproject.myproject' (Is it on sys.path?): cannot import name connections 

이 보이지만 가져 오는 동안이 from django.db import connections 실패 :이 스크립트를 실행할 때

import os, sys 
if __name__ == "__main__": 
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings") 
... 
... 
if __name__ == "__main__": 
    do_some_long_boring_work() 

지금, 나는 가져 오기 오류를 받고 있어요. 내가이 문자열을 언급하는 경우, 그것은! 작동하지만 내 DB 라우터없이 :(내가 사방 using()을 추가 할 수 있지만 멋진 아니다.

그래서, 웹 사이트가 잘 작동하지만, CLI 스크립트, 도와주세요. 실패


['/hosting/myproject/myproject', 
'/hosting/myproject', 
'/usr/lib/python2.7', 
'/usr/lib/python2.7/plat-linux2', 
'/usr/lib/python2.7/lib-tk', 
'/usr/lib/python2.7/lib-old', 
'/usr/lib/python2.7/lib-dynload', 
'/usr/local/lib/python2.7/dist-packages', 
'/usr/lib/python2.7/dist-packages', 
'/usr/lib/python2.7/dist-packages/PIL', 
'/usr/lib/python2.7/dist-packages/gst-0.10', 
'/usr/lib/python2.7/dist-packages/gtk-2.0', 
'/usr/lib/python2.7/dist-packages/ubuntu-sso-client', 
'/usr/lib/pymodules/python2.7'] 
:

갱신 :이 스크립트에서 sys.path

pprint를 DB 라우터를 추가하기 전에 /hosting/myproject/myproject/parser_jobs.py은 CLI에서 좋은 일


갱신 : WSGI 스크립트, 웹 사이트는 그것으로 선한 일 : 나는 django1.4의 manage.py에 /hosting/myproject/parser_jobs.py (곳 /hosting/myproject/myproject/parser_jobs.py에서 이동하는 경우

import os 
import sys 

path = '/hosting/myproject' 
if path not in sys.path: 
    sys.path.insert(0, path) 

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

import django.core.handlers.wsgi 
application = django.core.handlers.wsgi.WSGIHandler() 

답변

1

내 스크립트가 settings.py 와 같은 폴더에 있던해야 be) 올바르게 작동합니다.

또한 나는 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")을 변경 그리고 지금은 작동한다! 전용 DB 라우터없이 작동 parser_jobs.py 이전 위치에서