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

私のurls.py

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

from sourcedocs import views

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

私の混乱は、django.text.client の使用と、Web ブラウザーでサイトに ping を実行することの違いです。同じことだと思っていたのですが、一方が応答を返し、もう一方が応答を返さないので、明らかに間違っています。違いはApacheおよび/またはnginxレベルでのみですか、それともdjango機構の一部も異なりますか? これがdjangoシェルでは機能するがブラウザ経由では機能しない理由を確認するためにどこを見るべきかについてのアイデアはありますか?

編集:これが私のサイト利用可能/ 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 に感謝します。これは、これをデバッグする方法を見つけるのに役立ちました。"import sys print >> sys.stderr, [some debug statement]" とともに、/var/log/apache2/error.log を使用して、何が起こっているか、または何が起こっていないかを確認します。

問題は /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 の知識が 1 つ以上必要です。Apache の第一人者ではない場合は、適切な wsgi.py の実行と適切な設定を取得するために、時間をかけていじる必要があります。

于 2013-07-24T17:13:12.817 に答える