sam*_*rko 5 django google-app-engine
我正在尝试为将在GAE上托管的Django应用程序设置本地环境
我的第一个问题:我不能在app.yaml中询问Django 1.6(不支持)所以我切换到"最新"版本,但我不确定这样做会得到什么?
我的第二个:我想使用一些额外的库,如"django-taggit".我在项目中创建了一个"libs"目录,我复制了"taggit"目录.我首先添加了PYTHONPATH的绝对路径,然后我将它移动到PATH,然后在wsgi.py中尝试使用sys.path.append,但是当我运行dev_appserver.py时,我一直有导入错误(ImportError:没有名为taggit的模块) ?
是我还是缺乏关于我想做什么的文件?我花了很多时间谷歌搜索没有明确的结果.当您使用webapp2遵循谷歌方式时,一切似乎微不足道,但如果不遵循谷歌方式则更加复杂.GAE是Django托管的正确选择吗?
感谢您的帮助和建议.
通常可以在Google App Engine中使用您想要的任何库,但是有必要考虑GAE有一些注意事项(即GAE不会以通常某些代码部分用来执行的方式管理文件结构,在这种情况下,有必要使用boto和谷歌云存储和其他东西).
目前GAE没有使用Django 1.6作为内置库(第三方),但GAE允许包含您自己的django版本,没有限制.在最后一种情况下,您需要修改sys.path和app.yaml.要在生产sys.path中进行修改,可以在wsgi.py中使用此代码:
#wsgi.py ' Locate in main folder
PROJECT_DIR = os.path.abspath(os.path.dirname(__file__))
PACKAGES_DIR = os.path.join(PROJECT_DIR, 'Lib', 'site-packages')
def add_dir_to_path(dir):
if dir not in sys.path or sys.path.index(dir) > 0:
while dir in sys.path:
sys.path.remove(dir)
sys.path.insert(0, dir)
add_dir_to_path(PROJECT_DIR)
add_dir_to_path(PACKAGES_DIR)
#Delete current django version in production
for key in [key for key in sys.modules if key.startswith('django')]:
del sys.modules[key]
os.environ["DJANGO_SETTINGS_MODULE"] = 'myapp.settings'
from google.appengine.ext.webapp import util
# Force Django to reload its settings.
from django.conf import settings
settings._target = None
Run Code Online (Sandbox Code Playgroud)
在app.yaml中你可以使用:
application: myappinGAE
version: 1
runtime: python27
api_version: 1
threadsafe: true
env_variables:
DJANGO_SETTINGS_MODULE: 'myapp.settings'
handlers:
- url: /.*
script: wsgi.application
Run Code Online (Sandbox Code Playgroud)
这个变化将告诉GAE使用你自己的django版本,它位于/ Lib/site-packages/django中.但是,我在使用django 1.6时遇到了一些其他麻烦(数据库身份验证无法正常工作),但是对于init,这段代码可以帮助你,而且数据库身份验证适用于Django 1.4或Django 1.5.
相反,文档对此非常清楚。SDK 未提供的任何第三方库都需要安装在您的应用程序目录中。
开发服务器启动自己的沙箱环境并忽略您现有的 PYTHONPATH,并且无论如何您都无法在生产环境中更改 sys.path。
| 归档时间: |
|
| 查看次数: |
1916 次 |
| 最近记录: |