Проблема с созданием объекта в neo4j - PullRequest
8 голосов
/ 17 июня 2011

Я использую интеграцию django для neo4j и получаю следующую трассировку при попытке создать узел.
У меня установлен JPype, и его можно импортировать.

 p = Person.objects.create(first_name='omer', last_name='katz')
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/manager.py", line 138, in create
    return self.get_query_set().create(**kwargs)
  File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/model/django_model/__init__.py", line 362, in create
    obj.save(force_insert=True)
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py", line 460, in save
    self.save_base(using=using, force_insert=force_insert, force_update=force_update)
  File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_util.py", line 47, in __get__
    method, graphdb = self.descr_get(obj, cls)
  File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_util.py", line 41, in descr_get
    graphdb = self.accessor.__get__(obj, cls)
  File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/model/django_model/__init__.py", line 58, in __get__
    return DjangoNeo.neo
  File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/model/django_model/__init__.py", line 124, in neo
    return self.__setup_neo()
  File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/model/django_model/__init__.py", line 136, in __setup_neo
    self.__neo = NeoService(resource_uri, **options)
  File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/__init__.py", line 522, in __new__
    neo = core.load_neo(resource_uri, params)
  File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_core.py", line 180, in load_neo
    backend.initialize(**parameters)
  File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_backend/__init__.py", line 61, in initialize
    raise ImportError("No applicable backend found.")
ImportError: No applicable backend found.

РЕДАКТИРОВАТЬ:
В соответствии с моей просьбой, мои настройки neo4j:

NEO4J_RESOURCE_URI = '/var/neo4j/neo4django'
# NEO4J_RESOURCE_URI should be the path to where
#    you want to store the Neo4j database.

NEO4J_OPTIONS = {
    # this is optional and can be used to specify
    # extra startup parameters for Neo4j, such as
    # the classpath to load Neo4j from.
}

РЕДАКТИРОВАТЬ:
После того, как следующие рекомендации thobe я получаю следующее при попытке импортировать свои собственные модели:

    ERROR:root:Importing native backends failed.
    Traceback (most recent call last):
      File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_backend/__init__.py", line 51, in initialize
        embedded, remote = implementation.initialize(classpath, params)
      File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_backend/reflection.py", line 44, in initialize
        jvm = jpype.getDefaultJVMPath()
      File "/usr/local/lib/python2.7/dist-packages/jpype/_core.py", line 96, in getDefaultJVMPath
        return _linux.getDefaultJVMPath()
      File "/usr/local/lib/python2.7/dist-packages/jpype/_linux.py", line 36, in getDefaultJVMPath
        jvm = _getJVMFromJavaHome()
      File "/usr/local/lib/python2.7/dist-packages/jpype/_linux.py", line 55, in _getJVMFromJavaHome
        if os.path.exists(java_home+"/bin/javac") :
    TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
    ERROR:root:Importing native backends failed.
    Traceback (most recent call last):
      FERROR:root:Importing native backends failed.
    Traceback (most recent call last):
      File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_backend/__init__.py", line 51, in initialize
        embedded, remote = implementation.initialize(classpath, params)
      File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_backend/reflection.py", line 44, in initialize
        jvm = jpype.getDefaultJVMPath()
      File "/usr/local/lib/python2.7/dist-packages/jpype/_core.py", line 96, in getDefaultJVMPath
        return _linux.getDefaultJVMPath()
      File "/usr/local/lib/python2.7/dist-packages/jpype/_linux.py", line 36, in getDefaultJVMPath
        jvm = _getJVMFromJavaHome()
      File "/usr/local/lib/python2.7/dist-packages/jpype/_linux.py", line 55, in _getJVMFromJavaHome
        if os.path.exists(java_home+"/bin/javac") :
    TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
    ERROR:root:Importing native backends failed.
    Traceback (most recent call last):
      File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_backend/__init__.py", line 51, in initialize
        embedded, remote = implementation.initialize(classpath, params)
      File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_backend/reflection.py", line 44, in initialize
        jvm = jpype.getDefaultJVMPath()
      File "/usr/local/lib/python2.7/dist-packages/jpype/_core.py", line 96, in getDefaultJVMPath
        return _linux.getDefaultJVMPath()
      File "/usr/local/lib/python2.7/dist-packages/jpype/_linux.py", line 36, in getDefaultJVMPath
        jvm = _getJVMFromJavaHome()
      File "/usr/local/lib/python2.7/dist-packages/jpype/_linux.py", line 55, in _getJVMFromJavaHome
        if os.path.exists(java_home+"/bin/javac") :
    TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
    ERROR:root:Importing native backends failed.
    Traceback (most recent call last):
      File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_backend/__init__.py", line 51, in initialize
        embedded, remote = implementation.initialize(classpath, params)
      File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_backend/reflection.py", line 44, in initialize
        jvm = jpype.getDefaultJVMPath()
      File "/usr/local/lib/python2.7/dist-packages/jpype/_core.py", line 96, in getDefaultJVMPath
        return _linux.getDefaultJVMPath()
      File "/usr/local/lib/python2.7/dist-packages/jpype/_linux.py", line 36, in getDefaultJVMPath
        jvm = _getJVMFromJavaHome()
      File "/usr/local/lib/python2.7/dist-packages/jpype/_linux.py", line 55, in _getJVMFromJavaHome
        if os.path.exists(java_home+"/bin/javac") :
    TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
    ERROR:root:Importing native backends failed.
    Traceback (most recent call last):
      File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_backend/__init__.py", line 51, in initialize
        embedded, remote = implementation.initialize(classpath, params)
      File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_backend/reflection.py", line 44, in initialize
        jvm = jpype.getDefaultJVMPath()
      File "/usr/local/lib/python2.7/dist-packages/jpype/_core.py", line 96, in getDefaultJVMPath
        return _linux.getDefaultJVMPath()
      File "/usr/local/lib/python2.7/dist-packages/jpype/_linux.py", line 36, in getDefaultJVMPath
        jvm = _getJVMFromJavaHome()
      File "/usr/local/lib/python2.7/dist-packages/jpype/_linux.py", line 55, in _getJVMFromJavaHome
        if os.path.exists(java_home+"/bin/javac") :
    TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
    ERROR:root:Importing native backends failed.
    Traceback (most recent call last):
      File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_backend/__init__.py", line 51, in initialize
        embedded, remote = implementation.initialize(classpath, params)
      File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_backend/reflection.py", line 44, in initialize
        jvm = jpype.getDefaultJVMPath()
      File "/usr/local/lib/python2.7/dist-packages/jpype/_core.py", line 96, in getDefaultJVMPath
        return _linux.getDefaultJVMPath()
      File "/usr/local/lib/python2.7/dist-packages/jpype/_linux.py", line 36, in getDefaultJVMPath
        jvm = _getJVMFromJavaHome()
      File "/usr/local/lib/python2.7/dist-packages/jpype/_linux.py", line 55, in _getJVMFromJavaHome
        if os.path.exists(java_home+"/bin/javac") :
    TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'

ile "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_backend/__init__.py", line 51, in initialize
    embedded, remote = implementation.initialize(classpath, params)
  File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_backend/reflection.py", line 44, in initialize
    jvm = jpype.getDefaultJVMPath()
  File "/usr/local/lib/python2.7/dist-packages/jpype/_core.py", line 96, in getDefaultJVMPath
    return _linux.getDefaultJVMPath()
  File "/usr/local/lib/python2.7/dist-packages/jpype/_linux.py", line 36, in getDefaultJVMPath
    jvm = _getJVMFromJavaHome()
  File "/usr/local/lib/python2.7/dist-packages/jpype/_linux.py", line 55, in _getJVMFromJavaHome
    if os.path.exists(java_home+"/bin/javac") :
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
ERROR:root:Importing native backends failed.
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_backend/__init__.py", line 51, in initialize
    embedded, remote = implementation.initialize(classpath, params)
  File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_backend/reflection.py", line 44, in initialize
    jvm = jpype.getDefaultJVMPath()
  File "/usr/local/lib/python2.7/dist-packages/jpype/_core.py", line 96, in getDefaultJVMPath
    return _linux.getDefaultJVMPath()
  File "/usr/local/lib/python2.7/dist-packages/jpype/_linux.py", line 36, in getDefaultJVMPath
    jvm = _getJVMFromJavaHome()
  File "/usr/local/lib/python2.7/dist-packages/jpype/_linux.py", line 55, in _getJVMFromJavaHome
    if os.path.exists(java_home+"/bin/javac") :
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
ERROR:root:Importing native backends failed.
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_backend/__init__.py", line 51, in initialize
    embedded, remote = implementation.initialize(classpath, params)
  File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_backend/reflection.py", line 44, in initialize
    jvm = jpype.getDefaultJVMPath()
  File "/usr/local/lib/python2.7/dist-packages/jpype/_core.py", line 96, in getDefaultJVMPath
    return _linux.getDefaultJVMPath()
  File "/usr/local/lib/python2.7/dist-packages/jpype/_linux.py", line 36, in getDefaultJVMPath
    jvm = _getJVMFromJavaHome()
  File "/usr/local/lib/python2.7/dist-packages/jpype/_linux.py", line 55, in _getJVMFromJavaHome
    if os.path.exists(java_home+"/bin/javac") :
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
ERROR:root:Importing native backends failed.
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_backend/__init__.py", line 51, in initialize
    embedded, remote = implementation.initialize(classpath, params)
  File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_backend/reflection.py", line 44, in initialize
    jvm = jpype.getDefaultJVMPath()
  File "/usr/local/lib/python2.7/dist-packages/jpype/_core.py", line 96, in getDefaultJVMPath
    return _linux.getDefaultJVMPath()
  File "/usr/local/lib/python2.7/dist-packages/jpype/_linux.py", line 36, in getDefaultJVMPath
    jvm = _getJVMFromJavaHome()
  File "/usr/local/lib/python2.7/dist-packages/jpype/_linux.py", line 55, in _getJVMFromJavaHome
    if os.path.exists(java_home+"/bin/javac") :
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'

Ответы [ 3 ]

2 голосов
/ 27 июня 2011

Вы можете получить более подробную информацию о том, почему серверная часть не может быть найдена, добавив ее в NEO4J_OPTIONS:

NEO4J_OPTIONS = {
    log: True,
}

Вывод этого журнала облегчит диагностику реальной проблемы и предложитисправить.

1 голос
/ 27 июля 2011

Я столкнулся с той же проблемой. Что бы я ни делал (на Debian), Python не мог найти переменную среды JAVA_HOME. Самый простой способ исправить это, я полагаю, вы можете просто добавить это где-нибудь в Django, это добавить эти строки -

java_home = os.getenv("JAVA_HOME")
if(java_home == None):
    os.environ["JAVA_HOME"] = "/usr/lib/jvm/java-6-openjdk"

где путь - это расположение JDK, который вы хотите использовать (после него должна быть папка / bin с программами java и javac)

Я также попытался добавить местоположение в /etc/bash.bashrc. Который не работал для меня, но мог бы для вас.

JAVA_HOME=/usr/lib/jvm/java-6-openjdk
export JAVA_HOME
PATH=$PATH:$JAVA_HOME/bin
export PATH

Во всяком случае, это должно привести вас в правильном направлении. Но теперь у меня есть другая связанная проблема, на которой я застрял без ответа в течение недели:

1 голос
/ 23 июня 2011

ваш settings.py выглядит нормально ..

У вас установлен java SDK и для переменной JAVA_HOME установлена ​​ваша JDK? (Java JRE недостаточно)

Из документов Neo4j.py:

В некоторых ситуациях JPype процесс компиляции может не ссылаться с соответствующими заголовками JNI, что приводит к ошибкам компиляции. Первое, что нужно отметить, это то, что JPype нужны заголовки JNI из JDK в Для того, чтобы построить, недостаточно только JRE установлен, когда Здание JPype. Если JAVA_HOME переменная окружения не устанавливается, когда build JPype сценарий сборки (setup.py) из JPype может иметь проблемы с поиском соответствующего JNI заголовки. Если вы строите JPype с помощью sudo python setup.py установите вас может не наследовать JAVA_HOME переменная окружения в sudo окружающая среда, легкий выход перед запуском python setup.py bdist установка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...