Python Google应用程序引擎、云sql和django:没有rdbms后端模块

Python Google应用程序引擎、云sql和django:没有rdbms后端模块,python,sql,django,google-app-engine,google-cloud-sql,Python,Sql,Django,Google App Engine,Google Cloud Sql,我一直在关注一些关于使用云SQL和django设置google应用程序引擎(GAE)的教程。我得出的结论是,它们中的大多数让您安装python的本地副本和所有LIB。有些人甚至没有提到他们假设您将使用本地SQL server进行测试/开发 首先,本地安装的python模块不会神奇地上传到GAE。要么使用现有的GAE库,要么在项目中抛出所有代码以上载 其次,GAE在本地安装所有可用的库,以便您可以使用它们进行开发。因此,你不应该去获得你自己的(潜在的版本/插件冲突问题) 我已经建立了一个非常简单的

我一直在关注一些关于使用云SQL和django设置google应用程序引擎(GAE)的教程。我得出的结论是,它们中的大多数让您安装python的本地副本和所有LIB。有些人甚至没有提到他们假设您将使用本地SQL server进行测试/开发

首先,本地安装的python模块不会神奇地上传到GAE。要么使用现有的GAE库,要么在项目中抛出所有代码以上载

其次,GAE在本地安装所有可用的库,以便您可以使用它们进行开发。因此,你不应该去获得你自己的(潜在的版本/插件冲突问题)

我已经建立了一个非常简单的项目。我还没有费心安装本地SQL server。我在windows上(aaaargh)aargh。我正处于想
python manage.py syncdb
的阶段。在
settings.py
中,
数据库必须包含连接信息/url内容。据我所知,这可以用于具有
mysql
位的本地数据库(即部署后您自己的用于开发或云的数据库),或者设置为使用
rdbms
从本地副本连接到云(无论是什么)。所以我设置了
“引擎”:“google.appengine.ext.django.backends.rdbms”
,现在得到这个错误:

  Error was: No module named google.appengine.ext.django.backends.rdbms.base
我已经卸载了django的本地副本,并设置了我的
PYTHONPATH=C:\ProgramFiles(x86)\Google\Google\u appengine\lib\django-1.5
。没有这个集合,我会得到一个错误,所以我必须假设它使用的是GAE的django。我还找到了一个
C:\ProgramFiles(x86)\Google\Google\u appengine\Google\appengine\ext\django\backends\rdbms
路径,听起来很相关。所以我不知道下一步该怎么办。我假设这
rdbms
是远程与sqldb通信所必需的。我希望能够在本地/非生产环境中进行测试

我的配置中有什么可能会导致此问题


作为旁注,当我试图用GAE启动器启动服务器时,我只得到了
ImportError:无法导入设置“myblog.settings”(是否在sys.path上?):没有名为appengine\u toolkit的模块
python manage.py runserver
工作正常,直到请求触发连接到SQL server的尝试。

这里我缺少的主要内容是确保python能够看到GAE libs。我在linux中解决了这个问题:

export PYTHONPATH=/usr/local/google_appengine/:/usr/local/google_appengine/lib/:/usr/local/google_appengine/lib/django-1.5/
那是

  • google\u appengine/
  • google\u appengine/lib/
  • google\u appengine/lib/django-1.5/
PYTHONPATH
只是在windows上不起作用。关于
无法导入设置“myblog.settings”
,这只发生在windows上,我不明白为什么,也不想浪费时间

在GAE方面,有两件事真正帮助了我:

  • 对预期的(无论多么含蓄的)GAE有一些想法
  • 了解
    virtualenv
    (我发现这是一个不错的介绍),并迅速意识到google app engine的启动器在沙箱和您想要使用的外部库方面有多么混乱

  • 最后,我的设置如下。我使用
    virtualenv
    将所有软件包安装到本地
    env
    目录。为了在本地进行测试,这很好(使用上面的
    PYTHONPATH
    )。为了只部署正确的包(例如推送
    django wiki
    ,而不是
    MySQLdb
    ),我创建了一个
    libs
    目录,并在
    env/lib/python2.7/site packages/
    中简单链接了我想要的所有东西

    作为
    PYTHONPATH
    的更好的替代方案,类似的功能(在
    settings.py
    中):

    我还向
    app.yaml
    添加了一个
    skip_files:
    部分,以排除
    -^env/*
    ,并在部署时取消对其注释。如果我像其他人提到的那样将我的
    env
    放在项目目录之外,这可能就没有必要了

    IS_PRODUCTION = os.getenv('SERVER_SOFTWARE', '').startswith('Google App Engine')
    
    if IS_PRODUCTION:
        sys.path.insert(0, 'libs')
    else:
        sys.path.insert(0, 'env/lib/python2.7/site-packages/')