【问题标题】: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 上需要做的事情:

    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>
    

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

    希望我没有遗漏任何重要内容。

    【讨论】:

      猜你喜欢
      • 2011-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-20
      • 2021-11-16
      • 2015-04-04
      • 2020-04-23
      • 1970-01-01
      相关资源
      最近更新 更多