【问题标题】:How do I get Phusion Passenger to work with Django for App Engine?如何让 Phusion Passenger 使用 Django for App Engine?
【发布时间】:2010-05-16 03:57:19
【问题描述】:
让 Phusion Passenger 与 django-nonrel 一起为 Google 的 App Engine 工作,我正忙得不可开交。我似乎可以让它适用于 GoogleAppEngineLauncher 和生产服务器,但不适用于Passenger;或用于Passenger 和GoogleAppEngineLauncher 但不是生产服务器;或用于Passenger 和生产服务器,但不用于GoogleAppEngineLauncher。
如何让我的应用部署在所有三个上?
【问题讨论】:
标签:
django
google-app-engine
passenger
django-nonrel
【解决方案1】:
这是我在 Mac OS X Snow Leopard 上需要做的事情:
- 将djangoappengine目录直接放在'ROOT/common-apps'中。如果你把它放在你的 common-apps 目录之外,appengine 可能会混淆并使用 djangoappengine 目录作为你的 PROJECT_DIR 而不是使用 ROOT 作为你的 PROJECT_DIR。您可能还需要将 init.py 添加到您的 common-apps 目录。
- 将 django-nonrel 放在 ROOT 目录之外,并从 ROOT/common-apps/django 到 NONROOT/django-nonrel/django 建立一个符号链接。如果您将 django-nonrel 直接放入您的 common-apps 目录,您在进行部署时可能会超过 app-engine 上的 3000 个文件上传限制。
- 创建一个空的 ROOT/public 目录。乘客使用此目录的父目录作为项目根目录。
- 如下配置您的 apache vhost,假设 MYAPPNAME.local 是您的 /etc/hosts
- 创建passenger_wsgi.py并将其放入您的ROOT目录,如下所示。
虚拟主机:
<VirtualHost *:80>
ServerName MYAPPNAME.local
DocumentRoot /Users/mike/Projects/ROOT/public
<Directory /Users/mike/Projects/ROOT/public>
AllowOverride all
Options -MultiViews
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
passenger_wsgi.py:
import os, sys
# BUG there must be a better way than listing everything individually...
sys.path.append('/Users/mike/Projects/ROOT/')
sys.path.append('/Users/mike/Projects/ROOT/common-apps/')
sys.path.append('/Users/mike/Projects/NONROOT/django-nonrel/')
sys.path.append('/usr/local/google_appengine/')
sys.path.append('/usr/local/google_appengine/lib/yaml/lib/')
sys.path.append('/usr/local/google_appengine/lib/antlr3/')
sys.path.append('/usr/local/google_appengine/lib/django/')
sys.path.append('/usr/local/google_appengine/lib/cacerts/')
sys.path.append('/usr/local/google_appengine/lib/ipaddr/')
sys.path.append('/usr/local/google_appengine/lib/webob/')
sys.path.append('/usr/local/google_appengine/google/appengine/api/')
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
希望我没有遗漏任何重要内容。