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

    相关问题