3

埋め込まれたpythonバインディング(neo4j / python-embedded、バージョン1.6)を介してneo4jグラフデータベースを使用してPythonMicro-WebframeworkFlaskで動作する最小限の例を実装できませんでした。私が持っているもの(このStack-Overflow-スレッドに基づく)は次のとおりです。

import os
import jpype
from neo4j import GraphDatabase
from flask import Flask, g

# configuration
DATABASE = 'graphdatabase'
DEBUG = True
SECRET_KEY = 'blubber'
USERNAME = 'tobias'
PASSWORD = 'bla'
ADMIN = 'admin'

app = Flask(__name__)
app.config.from_object(__name__)

def connectDB(): 
    return GraphDatabase(app.config['DATABASE'])

def initDB():
    db = connectDB()
    with db.transaction:
        users = db.node()
        userIndex = db.node.indexes.create('users')
        user = db.node(name=app.config['ADMIN'])
        userIndex['name'][app.config['ADMIN']] = user
    db.shutdown()
    print "Database initialized."

@app.before_request
def before_request():
    jpype.attachThreadToJVM()
    g.db = connectDB()

@app.teardown_request
def teardown_request(exception):
    jpype.attachThreadToJVM()
    g.db.shutdown()

@app.route('/')
def index():
    with g.db.transaction:
          userIndex = g.db.node.indexes.get('users')
          user = userIndex['name'][app.config['ADMIN']].single
          username = user['name']
    return render_template('index.html', name=username)

if os.path.exists(app.config['DATABASE']) == False:
    initDB()

if __name__ == '__main__':
  app.run()

残念ながら、それはスローします:

    File "/home/tobias/Esk/Dev/adhocracyLight/venv/lib/python2.7/site-packages/flask/app.py", line 1518, in __call__
return self.wsgi_app(environ, start_response)
File "/home/tobias/Esk/Dev/adhocracyLight/venv/lib/python2.7/site-packages/flask/app.py", line 1506, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "/home/tobias/Esk/Dev/adhocracyLight/venv/lib/python2.7/site-packages/flask/app.py", line 1504, in wsgi_app
response = self.full_dispatch_request()
File "/home/tobias/Esk/Dev/adhocracyLight/venv/lib/python2.7/site-packages/flask/app.py", line 1264, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/tobias/Esk/Dev/adhocracyLight/venv/lib/python2.7/site-packages/flask/app.py", line 1262, in full_dispatch_request
rv = self.dispatch_request()
File "/home/tobias/Esk/Dev/adhocracyLight/venv/lib/python2.7/site-packages/flask/app.py", line 1248, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/tobias/Esk/Dev/adhocracyLight/adhocracyLight.py", line 73, in index
userIndex = g.db.node.indexes.get('users')
File "/home/tobias/Esk/Dev/adhocracyLight/venv/lib/python2.7/site-packages/neo4j/index.py", line 36, in get
return self._index.forNodes(name)
java.lang.RuntimeExceptionPyRaisable: java.lang.IllegalArgumentException: No index provider 'lucene' found. Maybe the intended provider (or one more of its dependencies) aren't on the classpath or it failed to load.

問題はスレッド化が原因だと思います(gスレッドローカルであり、neo4j-Databaseへのポインターが含まれていますが、これは悪い考えですか?)。

4

1 に答える 1

3

Neo4j Embeddedは、Webサーバー環境での使用を目的としたものではありません。Neo4jサーバーとNeo4jサーバークライアントを使用する必要があります。

Bulbs(http://bulbflow.com)は、Flaskを念頭に置いて設計されたNeo4jサーバークライアントです。実際、bulbflow.comは、Neo4j Herokuアドオン(現在は無料)を使用して、Heroku上のFlaskで実行されています。

クエリとトランザクション要求にはGremlinまたはCypherを使用します。

アプリを構成する方法の例については、Lightbulb(https://github.com/espeed/lightbulb)ブログの例、espを参照してください。

この行がbulbsconf.pyにあることに注意してください。

bulbs_config.set_neo4j_heroku()

Lightbulbは、Neo4j Herokuアドオンを使用してHerokuで実行するように設計されています。Herokuで実行していない場合は、その行を省略してください。

次に、Flaskビューまたはapp.pyで、次の手順を実行します。

from bulbsconf import graph
于 2012-06-02T17:39:41.127 に答える