3

Django を Apache 構成で動作させるのに大きな問題があります。私はサーバーを作成していないので、サーバーがどのように機能するかについてはあまり余裕がありません。基本的に、次の 3 つの仮想ホストがあります。

board.site.org、students.site.org、および insider.site.org

insider.site.org は、私が関心を持っている主なものです。私はその下にある小さなサイト (理想的には insider.site.org/tech) を担当しています。そこで何かを台無しにしないように、ファイルを元のディレクトリとは別に配置することにしました (Python 以外のサイトが既に配置されているため)。とにかく、私の仮想ホストは /etc/apache2/vhosts.d/ の別のファイルで定義されています

insider.site.org の構成は次のようになります。

insider.conf

LoadModule python_module /usr/lib64/apache2/mod_python.so

<VirtualHost 10.10.1.1:80>
ServerName insider.site.org
DocumentRoot /media/nss/VWEB/docs
   <Directory /media/nss/VWEB/docs>
      Options Indexes Multiviews
      AllowOverride None
      Order Allow,Deny
      #Allow from 10.11.0.78
      Allow from all
   </Directory>

Alias /tech  /srv/www/Tech

   <Directory /srv/www/Tech>
      SetHandler python-program
      PythonPath "['/srv/www/Tech'] + sys.path"
      PythonHandler django.core.handlers.modpython
      SetEnv DJANGO_SETTINGS_MODULE Tech.settings
      PythonDebug On
   </Directory>


Alias /media /srv/www/Media

   <Directory /srv/www/Media>
      SetHandler None
   </Directory>

</VirtualHost>
  • site.org と言うときは、実際の「site.org」の Web アドレスではなく、自分のサイトを指していることに注意してください。

今、それは私には正しいように思えますが、何らかの理由でhttp://insider.site.org/tech/にアクセスすると、次のエラーが表示されます。

Mod_python エラー:「PythonHandler mod_python.publisher」

トレースバック (最新の呼び出しが最後):

ファイル「/usr/lib64/python2.4/site-packages/mod_python/apache.py」、299 行目、HandlerDispatch 内 result = object(req)

ファイル "/usr/lib64/python2.4/site-packages/mod_python/publisher.py"、98 行目、ハンドラーのパス = [パス])

ファイル「/usr/lib64/python2.4/site-packages/mod_python/apache.py」、454行目、import_module f、p、d = imp.find_module(parts[i], path)

ImportError: index という名前のモジュールがありません

http://insider.site.org/tech (末尾にスラッシュがない) では 403 エラーが発生します私はこのディレクトリに Django を持っていますが、実行されていません (tech フォルダの下のすべてのディレクトリに _ init _.py があり、これは自分のパーソナル コンピューター (django から実行された) からのコピーです)テストサーバー))だから、それは問題ではないと思います。これは単に機能していません:-(

どんな助けでも大歓迎です、ありがとう。

4

3 に答える 3

2

最初の問題について、指定した PythonPath に Django があると確信していますか? 私のサーバーでは、私の PythonPath のリストには、最上位の django ディレクトリを含むディレクトリが含まれています。このディレクトリには、__init__.py に加えて、bin、contrib、admin、core などのディレクトリが含まれています。(また、Apache ユーザーがこれらのファイルとディレクトリの読み取りと実行のアクセス許可を持っていることも確認してください。これは明らかです。) これが私のセットアップです。

<Location "/myapp">
   SetHandler python-program
   PythonHandler django.core.handlers.modpython
   SetEnv DJANGO_SETTINGS_MODULE LogFileAnalyzer.settings
   PythonDebug on
   PythonPath "['/srv/www/dir_containing_django_dir', '/srv/www/myapp_dir'] + sys.path"
</Location>

ここではディレクトリの代わりに場所を使用しているため、マイレージは異なる場合があります。

2 番目の問題については、mod_rewrite の問題のように聞こえます。ここを参照してください。書き換えルールを定義することで、必要なスラッシュをサーバーに自動的に追加させることができます。

RewriteEngine  on
RewriteBase    /~quux/
RewriteRule    ^foo$  foo/  [R]

それが役立つことを願っています。

于 2009-02-24T18:43:01.353 に答える
1

Alias /tech /srv/www/Tech を削除 <Directory /srv/www/Tech>し、場所に変換する必要があります。

Apache に Python ファイルを提供させようとしているのではなく、特定の場所に到達したときに特定の Python プロセスを開始するように指示していることを思い出してください。

また、プライマリ ドメインの「フォルダ」に Django アプリを配置する代わりに、サブドメインを使用することをお勧めします。私の意見では、物事を単純化する傾向があります。

もご検討くださいmod_wsgi。最近、Django アプリで使用し始めましたが、パフォーマンスと安定性が飛躍的に向上しました :)

于 2009-03-05T08:31:06.633 に答える
0

mod_python の問題にはあまり役に立たないかもしれませんが、実際には、mod_python は Django をデプロイする最悪の方法です (実際には、あらゆる種類の Python をデプロイする最悪の方法です)。

少なくとも mod_wsgi の使用を検討してください。パフォーマンスやその他の多くの理由から優れています。また、freenode の #django でその mod の開発者から優れたサポートを受けることができます。

Spawning/FastCGI は、Apache をまったく気にしないという点でさらに優れています。

于 2009-03-05T13:21:07.137 に答える