1

我正忙着让 Phusion Passenger 与 django-nonrel 一起为 Google 的 App Engine 工作。我似乎可以让它适用于 GoogleAppEngineLauncher 和生产服务器,但不适用于Passenger;或用于Passenger 和GoogleAppEngineLauncher 但不是生产服务器;或用于乘客和生产服务器,但不用于 GoogleAppEngineLauncher。

如何让我的应用程序部署在所有三个上?

4

1 回答 1

0

这是我在 Mac OS X Snow Leopard 上需要做的事情:

  1. 将 djangoappengine 目录直接放在 'ROOT/common-apps' 中。如果你把它放在你的 common-apps 目录之外,appengine 可能会混淆并使用 djangoappengine 目录作为你的 PROJECT_DIR 而不是使用 ROOT 作为你的 PROJECT_DIR。您可能还需要将init .py 添加到您的 common-apps 目录。
  2. 将 django-nonrel 放在 ROOT 目录的外部,并从 ROOT/common-apps/django 到 NONROOT/django-nonrel/django 进行符号链接。如果您将 django-nonrel 直接放入您的 common-apps 目录,那么您在进行部署时可能会超过 app-engine 上的 3000 个文件上传限制。
  3. 创建一个空的 ROOT/public 目录。乘客使用此目录的父目录作为项目根目录。
  4. 如下配置您的 apache vhost,假设 MYAPPNAME.local 是您的 /etc/hosts
  5. 创建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>

乘客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()

希望我没有留下任何重要的东西。

于 2010-05-16T04:09:34.630 回答