2016-08-08 13 views
0

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それは実験的なもので、完全なノードを求めるならうまくいかないかもしれませんが、助けがあれば公開します

答えて

0

最初のトレースバックはpy2neoパッケージと互換性がないGAE's sandbox restrictions。特に、/Users/Arnaud/.neo4j/known_hostsファイルを書き込みモード(os_open(self.path, O_CREAT | O_APPEND | O_WRONLY, 0o600))で開こうとしましたが、これは許可されていません。何とかpy2neoがそれをしないように設定できるかどうか確認してください。

サンドボックスにはソケットにも制限があります(Limitations and restrictionsを参照)。

+0

返信ありがとう、私はコードとドキュメントでそれを探していますが、私はそれを見つけることができませんでした、私は再び検索し、私はライブラリの作成者に尋ねてみると、私はあなたに戻ってきます。 –

関連する問題