一部のデータにneo4jを使用するフラスコアプリがあります。Python サーバーを使用すると、すべてがローカルで正常に実行されますが、nginx + uwsgi にデプロイすると、py2neo で暗号クエリを実行できなくなります。誤解がpy2neoレベルなのか、nginx権限なのか、そのようなものなのかわかりません。(開始するには、フラスコと同じボックスでneo4jを実行しています。)
興味深いのは、それ以外の場合はクエリが機能し、neo4j コンソールを使用すると、存在しないというインデックス (「組織」) が実際に存在することです。エラーは次のとおりです。
File "/var/www/newproj/newproj/view_helpers.py", line 333, in tile_portfolios
X = cypher.execute(cdb,query)[0]
File "/usr/local/lib/python2.7/dist-packages/py2neo/cypher.py", line 261, in execute
params, row_handler=row_handler, metadata_handler=metadata_handler, error_handler=error_handler
File "/usr/local/lib/python2.7/dist-packages/py2neo/cypher.py", line 118, in execute
stacktrace=err.stacktrace,
CypherError: (u'Index `organization` does not exist', u'MissingIndexException', [u'org.neo4j.cypher.internal.executionplan.builders.IndexQueryBuilder$.checkNodeIndex(IndexQueryBuilder.scala:120)', u'org.neo4j.cypher.internal.executionplan.builders.IndexQueryBuilder$.getNodeGetter(IndexQueryBuilder.scala:87)', u'org.neo4j.cypher.internal.executionplan.builders.IndexQueryBuilder.createStartPipe(IndexQueryBuilder.scala:62)', u'org.neo4j.cypher.internal.executionplan.builders.IndexQueryBuilder.apply(IndexQueryBuilder.scala:38)', u'org.neo4j.cypher.internal.executionplan.ExecutionPlanImpl.prepareExecutionPlan(ExecutionPlanImpl.scala:45)', u'org.neo4j.cypher.internal.executionplan.ExecutionPlanImpl.<init>(ExecutionPlanImpl.scala:31)', u'org.neo4j.cypher.ExecutionEngine$$anonfun$prepare$1.apply(ExecutionEngine.scala:67)', u'org.neo4j.cypher.ExecutionEngine$$anonfun$prepare$1.apply(ExecutionEngine.scala:67)', u'org.neo4j.cypher.internal.LRUCache$LazyValue.value(LRUCache.scala:27)', u'org.neo4j.cypher.internal.LRUCache.getOrElseUpdate(LRUCache.scala:39)', u'org.neo4j.cypher.ExecutionEngine.prepare(ExecutionEngine.scala:67)', u'org.neo4j.cypher.ExecutionEngine.execute(ExecutionEngine.scala:59)', u'org.neo4j.cypher.ExecutionEngine.execute(ExecutionEngine.scala:63)', u'org.neo4j.cypher.javacompat.ExecutionEngine.execute(ExecutionEngine.java:79)', u'org.neo4j.server.rest.web.CypherService.cypher(CypherService.java:64)', u'java.lang.reflect.Method.invoke(Method.java:616)'])
そして、存在しないと言われているインデックスが実際に存在すると確信している理由は次のとおりです。
neo4j-sh (?)$ index --indexes
Node indexes:
vertex
organization
Relationship indexes:
edge
neo4j-sh (?)$ index --get-config organization
{
"provider": "lucene",
"type": "exact"
}
それで、これは cypher.py ファイルでチェックアウトする必要があるものですか? それとも、Python サーバーによって実行されていない場合、nginx が locahost:7474 からの応答を読み取れないというパーミッションの問題のように見えますか? 奇妙なことに、py2neo の他の側面はサーバー上で正しく動作します。たとえばneo4j.GraphDatabaseService("http://localhost:7474/db/data/").get_or_create_indexed_node()
、デバッグの助け (または、これらの優れたプロジェクトのいずれかに適切なバグ レポートを提出しますか?) は大歓迎です。