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