16

私はホスティング プロバイダーと協力して Django アプリケーションを稼働させようとしていますが、どちらもあまり経験がなく、基本的に完全な行き詰まりに陥っています。

conf ファイルに直接アクセスすることはできませんが、その内容について次のように説明されています。

<IfModule mod_wsgi.c>
WSGIScriptAlias /fredapp/ /home/fred/public_html/cgi-bin/fredapp/apache/django.wsgi
WSGIDaemonProcess fred threads=15 display-name=%{GROUP} python-path=/home/fred/public_html/cgi-bin/fredapp/apache/
WSGIProcessGroup fred
WSGIApplicationGroup %{GLOBAL}
</IfModule>

Alias /robots.txt /home/fred/public_html/fred-site/robots.txt
Alias /favicon.ico /home/fred/public_html/fred-site/favicon.ico

Alias /settings/media/ /home/fred/public_html/fred-site/media/

私の "django.wsgi" スクリプトは派手なものではありません:

import os, sys
sys.path.append('/home/fred/public_html/cgi-bin/')
sys.path.append('/home/fred/public_html/cgi-bin/fredapp/')
os.environ['DJANGO_SETTINGS_MODULE'] = 'fredapp.settings'

import django.core.handlers.wsgi

application = django.core.handlers.wsgi.WSGIHandler()

私の理解では、これはすべて、domain.com/fredapp/ にリクエストが届いた場合、django.wsgi を介してアプリケーションに引き渡す必要があることを意味します。ただし、私が得る唯一の応答は次のとおりです。

[Fri Jan 22 18:46:08 2010] [error] [client xx.xxx.xx.xx] File does not exist: /home/fred/public_html/domain.com/500.shtml
[Fri Jan 22 18:46:08 2010] [error] [client xx.xxx.xx.xx] mod_wsgi (pid=26760): Exception occurred processing WSGI script '/home/fred/public_html/cgi-bin/fredapp/apache/django.wsgi'.
[Fri Jan 22 18:46:03 2010] [error] [client xx.xxx.xx.xx] File does not exist: /home/fred/public_html/domain.com/404.shtml
[Fri Jan 22 18:46:03 2010] [error] [client xx.xxx.xx.xx] File does not exist: /home/fred/public_html/domain

これは Linux 上の Apache で実行されています。サーバー上の Python インタープリターで .wsgi スクリプトの各行を実行しようとしましたが、いずれもエラーを返しません。私もこのトリックを試しましたsys.stdout = sys.stderrが、上記以外の出力は得られませんでした。The File does not exist エラーは、サイトのセットアップの残りの部分に関係しており、任意の要求で発生します。アプリ自体を実行しようとしているだけなので、すべての設定 (エラー ページやインデックス ページなど) を適切に完了していません。

私はこのアプリを自分のマシンで Apache の下で起動して実行していますが、デーモン モードではありませんが、これは私の最初の Django アプリであり、私のホスティング プロバイダーはこれまで Django アプリを構成したことがないと思います。少し盲目。誰か提案があれば、私はとても感謝しています。ありがとうございました!

4

3 に答える 3

22

引用された構成が使用しているものである場合、エラーは実際には明らかです。あなたが持っている:

WSGIDaemonProcess fred threads=15 display-name=%{GROUP} python-path=/home/fred/public_html/cgi-bin/fredapp/apache/
WSGIProcessGroup scratchf

そのはず:

WSGIDaemonProcess fred threads=15 display-name=%{GROUP} python-path=/home/fred/public_html/cgi-bin/fredapp/apache/
WSGIProcessGroup fred

つまり、プロセス グループの名前が一致する必要があります。

ただし、次のエラー メッセージが表示されるはずです。

No WSGI daemon process called 'scratchf' has been configured

これは、ログに記録されたエラーの前である可能性があります。

Exception occurred processing WSGI script

これが、すべてのエラー ログ メッセージを提供し、それらが関連していないと想定しないことが重要である理由です。

または、使用している構成とは異なる構成を引用したか、すべての構成ではありません。


更新 1

エラーを特定の URL にリダイレクトするために、Apache で ErrorDocument ディレクティブを有効にしている可能性があります。ただし、Web サーバーのルートに Django をマウントし、それらのエラー URL が Django に渡されることを除外していないため、エラーが生成されると、Django はエラー ドキュメントのリダイレクトを取得しますが、URL を解決できず、その後 404 を生成します。 Apache はエラー ページ リダイレクトの 404 を検出したため、デフォルトのエラー ページ 500 を返します。最終的な結果は、真の元のエラーであり、すべての情報が失われます。

したがって、Apache 構成に移動し、ErrorDocument ディレクティブをコメントアウトします。


更新 2

構成を次のように変更します。

WSGIScriptAlias /fredapp /home/fred/public_html/cgi-bin/fredapp/apache/django.wsgi

行の 2 番目の値の末尾にスラッシュを付けないでください。実際に Web サーバーのルートではなく、サブ URL にマウントしようとしていたことを見逃していました。

于 2010-01-22T10:12:25.703 に答える
1

開始ディレクトリが、プロジェクトが存在するディレクトリではない可能性はありますか?

今日も Apache+mod_wsgi+Django アプリをセットアップし、django.wsgi に追加した後:

 os.chdir('/home/user/my_django_project')

すべてが魔法のように機能し始めました。

于 2010-01-22T00:02:48.763 に答える
0

Apache を実行しているユーザーがファイルを読み取る権限を持っていない場合、同じエラーが発生しました。

于 2010-01-22T08:32:31.150 に答える