如何让Phusion Passenger与Django一起使用App Engine?

时间:2010-05-16 03:57:19

标签: django google-app-engine passenger django-nonrel

我有一段时间让Phusion Passenger与django-nonrel一起为谷歌的App Engine工作。我似乎可以让它适用于GoogleAppEngineLauncher和生产服务器,但不适用于Passenger;或者对于Passenger和GoogleAppEngineLauncher而不是生产服务器;或者对于Passenger和生产服务器,但不是GoogleAppEngineLauncher。

如何在三者上部署我的应用程序?

1 个答案:

答案 0 :(得分:0)

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

  1. 将djangoappengine目录直接放在'ROOT / common-apps'中。如果你把它放在你的common-apps目录之外,那么appengine可能会混淆并使用djangoappengine目录作为你的PROJECT_DIR,而不是使用ROOT作为你的PROJECT_DIR。您可能还需要在common-apps目录中添加 init .py。
  2. 放置ROOT目录的django-nonrel OUTSIDE,并将ROOT / common-apps / django的符号链接设为NONROOT / django-nonrel / django。如果你将django-nonrel直接放入你的common-apps目录中,你去部署时可能会超过app-engine上的3000文件上传限制。
  3. 创建一个空的ROOT /公共目录。 Passenger使用此目录的父级作为项目根目录。
  4. 如下所示配置您的apache虚拟主机,假设MYAPPNAME.local是您的/ etc / hosts
  5. 创建passenger_wsgi.py并将其放在ROOT目录中,如下所示。
  6. 虚拟主机:

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

    希望我没有留下任何重要的内容。