1

嘗試從標準環境appengine(開發環境)使用外部託管的Cassandra服務器。我看到這個錯誤:Google Appengine external cassandra ImportError:沒有名爲cassandra.cluster的模塊

"..main.py", line 5, in <module> 
    import cassandra.cluster 
    "..google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/python/sandbox.py", line 964, in load_module 
    raise ImportError('No module named %s' % fullname) 
ImportError: No module named cassandra.cluster 

main.py

import cassandra 

# this works ... prints 3.9.0 
print cassandra.__version__ 

# all these variations fail with import error 
import cassandra.cluster    
# from cassandra.cluster import Cluster 
# from cassandra import cluster 

# this works 
import cassandra.metrics 

的app.yaml

runtime: python27 
api_version: 1 
threadsafe: true 

- url: /.* 
    script: main.app 

appengine_config.py

from google.appengine.ext import vendor 
vendor.add('lib') 
與​​
  • 進口cassandra.metrics工作指示的路徑安裝

    文件夾結構

    app.yaml 
    appengine_config.py 
    main.py 
    lib 
        |-cassandra 
         |-cluster.py 
         |-..... 
        |-concurrent 
        |-six 
    
    • 所有模塊似乎確定

    任何幫助表示讚賞。

  • +0

    發佈'appengine_config.py'的內容 –

    +0

    嘗試'從cassandra導入集羣' –

    +1

    'print cassandra .__ path__'的輸出是什麼?並且你不能運行具有c擴展名的模塊.. –

    回答

    2

    您遇到的錯誤sandbox.py, line 964顯示它從執行C模塊的導入掛接中拋出。阿維納什拉吉已經指出,你「不能運行有C擴展模塊」的東西,顯然是documented

    The interpreter cannot load Python modules with C code; it is a "pure" Python environment.

    即使卡桑德拉驅動程序,支持no-cython installation

    pip install -t lib/ --install-option="--no-cython" cassandra-driver 
    

    .. 。去這條道路將使我們打了第二個問題與Python Standard Library's fcntl module

    Traceback (most recent call last): 
        File "/home/mroman/google-cloud-sdk/platform/google_appengine/google/appengine/runtime/wsgi.py", line 240, in Handle 
        handler = _config_handle.add_wsgi_middleware(self._LoadHandler()) 
        File "/home/mroman/google-cloud-sdk/platform/google_appengine/google/appengine/runtime/wsgi.py", line 299, in _LoadHandler 
        handler, path, err = LoadObject(self._handler) 
        File "/home/mroman/google-cloud-sdk/platform/google_appengine/google/appengine/runtime/wsgi.py", line 85, in LoadObject 
        obj = __import__(path[0]) 
        File "/home/mroman/tmp/cassandra_importError/main.py", line 7, in <module> 
        import asyncore 
        File "/usr/lib/python2.7/asyncore.py", line 608, in <module> 
        import fcntl 
        File "/home/mroman/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/python/sandbox.py", line 964, in load_module 
        raise ImportError('No module named %s' % fullname) 
    ImportError: No module named fcntl 
    

    看來,因爲它PERFO該模塊未列入白名單文件描述符上的rms文件控制和I/O控制以及AppEngine受限制的「沙箱」不允許應用程序寫入文件系統。

    我檢查了其他卡桑德拉驅動器,如:

    由於上述所有的,我相信你的唯一的選擇是:

    乾杯

    +0

    感謝您的研究。所以基本上死在水中。任何關於PHP驅動程序的想法?如果這樣的話,至少我可以將它作爲一個模塊運行,並在appengine標準環境中構建一個API。 – Fakeer

    +0

    Cassandra的Datastax PHP驅動程序也具有C擴展,因此沒有任何解決方法。我建議去GAE靈活。 –

    +0

    Flex現在不是一個選項。必須檢查兩個剩餘的可能性 - java或Go – Fakeer

    相關問題