2013-08-15 3 views
1

У меня есть следующий код, написанный на python, для связи с ExistDB с использованием модуля eulexistdb.Конфигурирование eulexistdb с ошибкой ввода python в модуле настройки django

from eulexistdb import db  
class TryExist:  
    def __init__(self): 
     self.db = db.ExistDB(server_url="http://localhost:8899/exist")  
    def get_data(self, query): 
     result = list() 
     qresult = self.db.executeQuery(query) 
     hits = self.db.getHits(qresult) 
     for i in range(hits): 
      result.append(str(self.db.retrieve(qresult, i))) 
     return result 

quer = ''' 
let $x:= doc("/db/sample/books.xml") 
return $x/bookstore/book/author/text() 
''' 
a = TryExist() 
myres = a.get_data(quer) 
print myres 

Я поражен, что этот код работает отлично в Aptana Studio 3 дает мне выход, я хочу, но при работе с другой IDE или с помощью команды «python.exe myfile.py» приводит следующее сообщение об ошибке:

django.core.exceptions.ImproperlyConfigured: Requested setting EXISTDB_TIMEOUT, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings. 

я использовал свой собственный localsetting.py, чтобы решить эту проблему, используя следующий код:

import os 
# must be set before importing anything from django 
os.environ['DJANGO_SETTINGS_MODULE'] = 'localsettings' 
... writing link for existdb here... 

Тогда я получаю сообщение об ошибке, как:

django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty. 

Как настроить параметр в Django для ExistDB? Помогите мне здесь пожалуйста.

ответ

1

Никогда не думайте. Я нашел ответ с небольшими исследованиями из этого site. Я создал файл localsetting.py со следующими конфигурациями.

EXISTDB_SERVER_USER = 'user' 
EXISTDB_SERVER_PASSWORD = 'admin' 
EXISTDB_SERVER_URL = "http://localhost:8899/exist" 
EXISTDB_ROOT_COLLECTION = "/db" 

и в моем главном файле myfile.py я использовал:

from localsettings import EXISTDB_SERVER_URL 
import os 
os.environ['DJANGO_SETTINGS_MODULE'] = 'localsettings.py' 

и В классе TryExist я изменил в __ __ инициализации() как:

def __init__(self): 
     self.db = db.ExistDB(server_url=EXISTDB_SERVER_URL) 

PS : Использование только os.environ ['DJANGO_SETTINGS_MODULE'] = 'localsettings' содержит django.core.exceptions.Improper lyConfigured: параметр SECRET_KEY не должен быть пустым..

0

Причина, по которой ваш код работает в среде IDE, но не в командной строке, вероятно, что у вас есть разница в том, какие среды Python используются для запуска вашего кода.

Я сделал несколько тестов:

  1. Virtualenv с eulexistdb установлен, но не Джанго. eulexistdb пытается загрузить django.conf, но не работает, поэтому не пытается получить конфигурацию из конфигурации Django. В конечном счете, ваш код работает без ошибок.

  2. Virtualenv with 'eulexistdb *and* Django: eulexistdb tries to load django.conf` и преуспеть. Затем я пытаюсь получить конфигурацию из конфигурации Django, но не удается. Я получаю ту же ошибку, которую вы описываете в своем вопросе.

Чтобы предотвратить ошибки в присутствии установки Django, проблема может быть исправлена ​​путем добавления конфигурации Django, как вы делали в вашем accepted self-answer. Но если код, который вы пишете, в противном случае не использует Django, это немного окольный способ заставить ваш код работать.Самый прямой способ решить эту проблему, чтобы просто добавить параметр timeout к коду, который создает экземпляр ExistDB:

self.db = db.ExistDB(
     server_url="http://localhost:8080/exist", timeout=None) 

Если вы сделаете это, то не будет никаких ошибок. Установка timeout на None оставляет поведение по умолчанию на месте, но предотвращает поиск eulexistdb конфигурации Django.

Смежные вопросы