0

我正在开发一个带有 Mongo 后端的 Django 系统,这是我第一次尝试这种设置。它有一个相当标准的 nginx-hands-off-to-Apache-for-python 服务器设置。这一切似乎都适用于同一服务器上更标准的 Django-MySQL 应用程序。

对于我的 Django-Mongo 应用程序,当我使用“python manage.py shell”时,我得到:

from django.test.client import Client
client = Client()
response = client.get('/')
response.status_code
200
response.content
'<html>\n  <head>\n    <link href="/static/blog.css" rel="stylesheet" type="text/css">\n    <title>Worldmaker</title>\n  </head>\n  <body>\n      <ul>\n        <li><a href="sourcedoc/create/">New Sourcedoc</a></li>\n        <li><a href="sourcedoc/list/">All Sourcedocs</a></li>\n        <li><a href="noun/create/">New Noun</a></li>\n        <li><a href="noun/list/">All Nouns</a></li>\n      </ul>\n      <h1>Worldmaker</h1>\n    \n\n  </body>\n</html>\n\n'

但是,当我浏览到http://www.mydomain.com/gogoworld/时,我得到一个 nginx 504 页面:

504 网关超时 nginx/1.4.1

我的 /etc/nginx/sites-enabled/vhost 包括:

  location /gogoworld/ {
    proxy_pass http://127.0.0.1:84;
    include /etc/nginx/proxy.conf;
  }

我的 /etc/apache2/httpd.conf 包括:

<Directory "/home/rosshartshorn/htdocs/gogoworld">
WSGIScriptAlias /gogoworld /home/rosshartshorn/htdocs/gogoworld/wsgi.py

WSGIPythonPath /home/rosshartshorn/htdocs/ordinarymysqlapp:/home/rosshartshorn/htdocs/worldmaker:/home/rosshartshorn/htdocs/gogoworld

我的网址.py

from django.conf.urls import patterns, include, url

from sourcedocs import views

urlpatterns = patterns('',
    url(r'^$', views.index),
)

我的困惑是使用 django.text.client 和使用我的网络浏览器 ping 站点之间有什么区别。我曾认为这是同一件事,但由于一个返回响应而另一个没有,我显然是不正确的。差异仅在 apache 和/或 nginx 级别,还是 django 机器的某些部分也不同?关于在哪里查看为什么这在 django shell 中有效但不能通过浏览器的任何想法?

编辑:这是我的网站可用/rosshartshorn 中的内容:

Listen 84

<IfModule mod_ssl.c>
    Listen 443
</IfModule>

<IfModule mod_gnutls.c>
    Listen 443
</IfModule>
<VirtualHost *:84>
  ServerName     www.rosshartshorn.net
  ServerAlias rosshartshorn.net
  DocumentRoot /home/rosshartshorn/htdocs
  <Directory /home/rosshartshorn/htdocs>
    AllowOverride All
    allow from all
  </Directory>
</VirtualHost>
4

1 回答 1

0

非常感谢 Hieu Nguyen 的上述评论,这帮助我找到了调试它的方法。大量使用 /var/log/apache2/error.log 来查看发生了什么/没有发生什么,以及“import sys print >> sys.stderr, [some debug statement]”

原来问题出在我的 /etc/apache2/httpd.conf 中,现在看起来更像这样:

WSGIScriptAlias /secretoktobermoneymade /home/rosshartshorn/htdocs/ordinarymysqlapp/wsgi.py
WSGIScriptAlias /gogoworld /home/rosshartshorn/htdocs/gogoworld/gogoworld/wsgi.py

WSGIPythonPath /home/rosshartshorn/htdocs/gogoworld/:/home/rosshartshorn/htdocs/gogoworld/gogoworld:/home/rosshartshorn/htdocs/ordinarymysqlapp

以前,我有一个组合,没有 gogoworld/wsgi.py 的位置在 python 路径上,然后还有 gogoworld/wsgi.py 的问题,首先找到普通mysqlapp的settings.py并运行它(这就是为什么我切换了顺序,以便 gogoworld 首先出现在 WSGIPythonPath 中)。我相信当您有多个 django 应用程序时,可能有更好的设置方法,但是这种设置似乎对新旧应用程序都有效。

长话短说:多个 django 应用程序需要比一个更多的 Apache 知识,如果您不是 Apache 专家,那么您将不得不花一些时间来摆弄它以执行正确的 wsgi.py 和正确的设置!

于 2013-07-24T17:13:12.817 回答