Googleアプリケーションエンジンでpy2neoを使用してバックエンドを設定しようとしています。アプリエンジンの開発者にプッシュするとうまく動作しますが、残念ながらlocalhostで使用すると機能しません。Googleアプリケーションエンジンでpy2neo v3を使用しています
まず、私は(その先端のおかげで、私のコードは私のdevの上で動作します)PythonでHOME環境変数をsettedてきたが、それは私はそのアドバイスに従ってきた、そして、ローカルホスト上の問題
が解決しません"ImportError: No module named _ssl" with dev_appserver.py from Google App Engine これは1つの例外を防止しますが、後に別の例外が発生します。すべてがサンドボックスエンバイロメントでlauchesと偽のユーザーに、例外が正常であるが、それはdevの上では発生しませんので
は、ここに私のトレースバック
ft1.1: Traceback (most recent call last):
File "/Users/Arnaud/Documents/project/app/test/neo4j/test_graph_handler.py", line 13, in test_get_direct_neighbours
selection = self.graph_handler.get_direct_neighbours("8")
File "/Users/Arnaud/Documents/project/app/neo4j/graph_handler.py", line 20, in get_direct_neighbours
labels(l) AS `relationship`" % self.protect(ean))
File "/Users/Arnaud/Documents/project/app/libs/py2neo/database/__init__.py", line 694, in run
return self.begin(autocommit=True).run(statement, parameters, **kwparameters)
File "/Users/Arnaud/Documents/project/app/libs/py2neo/database/__init__.py", line 370, in begin
return self.transaction_class(self, autocommit)
File "/Users/Arnaud/Documents/project/app/libs/py2neo/database/__init__.py", line 1212, in __init__
self.session = driver.session()
File "/Users/Arnaud/Documents/project/app/libs/py2neo/packages/neo4j/v1/session.py", line 126, in session
connection = connect(self.address, self.ssl_context, **self.config)
File "/Users/Arnaud/Documents/project/app/libs/py2neo/packages/neo4j/v1/bolt.py", line 444, in connect
if not store.match_or_trust(host, der_encoded_server_certificate):
File "/Users/Arnaud/Documents/project/app/libs/py2neo/packages/neo4j/v1/bolt.py", line 397, in match_or_trust
f_out = os_open(self.path, O_CREAT | O_APPEND | O_WRONLY, 0o600) # TODO: Windows
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/devappserver2/python/stubs.py", line 73, in fake_open
raise OSError(errno.EROFS, 'Read-only file system', filename)
OSError: [Errno 30] Read-only file system: '/Users/Arnaud/.neo4j/known_hosts'
です。ここ
とは/Users/Arnaud/Documents/project/app/neo4j/graph_handler.py:20
13 def get_direct_neighbours(self, ean):
14 selection = self.graph.run("\
15 MATCH\
16 (:Product {ean: '%s'})-->(l)<--(n:Product)\
17 RETURN\
18 n.ean AS `ean`,\
19 n.name AS `name`,\
20 labels(l) AS `relationship`" % self.protect(ean))
21 return selection
は、それがDEVに働くだろうだから、なぜ理解することです、私はどこのサンドボックスをローカライズしようとしましたが、 devの実行開始が異なります。 dev内、SSLのロードがssl_compatに失敗しているので、それは /Users/Arnaud/Documents/project/app/libs/py2neo/packages/neo4j/v1/bolt.py:427
427 if ssl_context and SSL_AVAILABLE:
428 host, port = host_port
429 if __debug__: log_info("~~ [SECURE] %s", host)
430 try:
431 s = ssl_context.wrap_socket(s, server_hostname=host if HAS_SNI else None)
432 except SSLError as cause:
433 error = ProtocolError("Cannot establish secure connection; %s" % cause.args[1])
434 error.__cause__ = cause
435 raise error
436 else:
437 # Check that the server provides a certificate
438 der_encoded_server_certificate = s.getpeercert(binary_form=True)
439 if der_encoded_server_certificate is None:
440 raise ProtocolError("When using a secure socket, the server should always provide a certificate")
441 trust = config.get("trust", TRUST_DEFAULT)
442 if trust == TRUST_ON_FIRST_USE:
443 store = PersonalCertificateStore()
444 if not store.match_or_trust(host, der_encoded_server_certificate):
445 raise ProtocolError("Server certificate does not match known certificate for %r; check "
446 "details in file %r" % (host, KNOWN_HOSTS))
447 else:
448 der_encoded_server_certificate = None
で右ここにあります.pyがlocalhost上にある間は成功し、if文の中にコードが入り、行444で失敗する
SSL_AVAILABLEを強制的に偽造することを理解するには、それでも私はアプリエンジンソケットソケットとして認識されない
ft1.1: Traceback (most recent call last):
File "/Users/Arnaud/Documents/project/app/test/neo4j/test_graph_handler.py", line 13, in test_get_direct_neighbours
selection = self.graph_handler.get_direct_neighbours("8")
File "/Users/Arnaud/Documents/project/app/neo4j/graph_handler.py", line 20, in get_direct_neighbours
labels(l) AS `relationship`" % self.protect(ean))
File "/Users/Arnaud/Documents/project/app/libs/py2neo/database/__init__.py", line 694, in run
return self.begin(autocommit=True).run(statement, parameters, **kwparameters)
File "/Users/Arnaud/Documents/project/app/libs/py2neo/database/__init__.py", line 370, in begin
return self.transaction_class(self, autocommit)
File "/Users/Arnaud/Documents/project/app/libs/py2neo/database/__init__.py", line 1212, in __init__
self.session = driver.session()
File "/Users/Arnaud/Documents/project/app/libs/py2neo/packages/neo4j/v1/session.py", line 126, in session
connection = connect(self.address, self.ssl_context, **self.config)
File "/Users/Arnaud/Documents/project/app/libs/py2neo/packages/neo4j/v1/bolt.py", line 460, in connect
ready_to_read, _, _ = select((s,),(),(), 0)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/api/remote_socket/_remote_socket.py", line 483, in select
_SetState(request, _GetSocket(value), POLLIN)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/api/remote_socket/_remote_socket.py", line 425, in _GetSocket
raise ValueError('select only supported on socket objects.')
ValueError: select only supported on socket objects.
誰かが同じ問題に直面したことがあるなら、私はそれに興味があるでしょう。
EDIT:知りたいという人のために 、私はまだナイジェルからの答えを持っていないと私はいくつかの高速なソリューションを必要に応じて、私はCYPHER要求を送信し、受け取るために自分自身のクラスを作成しましたが、それはアプリと互換性がありますエンジンと私は要点にそれを置いた:https://gist.github.com/ArnaudParan/e26f291ba8b3c08e5b762d549667c7d6それは実験的なもので、完全なノードを求めるならうまくいかないかもしれませんが、助けがあれば公開します
返信ありがとう、私はコードとドキュメントでそれを探していますが、私はそれを見つけることができませんでした、私は再び検索し、私はライブラリの作成者に尋ねてみると、私はあなたに戻ってきます。 –