django - 使用 mod_python 设置 Django,使用 Alias 在 SuSE 上设置 Apache

标签 django apache apache2 mod-python

我在让 Django 使用我的 Apache 配置时遇到了重大问题。我没有创建服务器,所以我对服务器的工作方式没有太多余地。本质上有三个虚拟主机:

board.site.org、students.site.org 和 insider.site.org

insider.site.org 是我最关心的。我负责它下面的一个小站点(最好在 insider.site.org/tech)。我决定将我的文件与原始目录分开,以免弄乱那里的东西(因为非 python 站点已经存在)。无论如何,我的虚拟主机在/etc/apache2/vhosts.d/中的单独文件中定义

这是 insider.site.org 的配置

内部人员.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”网址。

现在,这似乎对我来说应该是正确的,但出于某种原因,访问 http://insider.site.org/tech/给我这个错误:

Mod_python error: "PythonHandler mod_python.publisher"

Traceback (most recent call last):

File "/usr/lib64/python2.4/site-packages/mod_python/apache.py", line 299, in HandlerDispatch result = object(req)

File "/usr/lib64/python2.4/site-packages/mod_python/publisher.py", line 98, in handler path=[path])

File "/usr/lib64/python2.4/site-packages/mod_python/apache.py", line 454, in import_module f, p, d = imp.find_module(parts[i], path)

ImportError: No module named index

http://insider.site.org/tech (没有尾部正斜杠)导致 403 错误。我在这个目录中确实有 Django,但它根本没有被执行(我在 tech 文件夹下的所有目录中都有 _ init _.py,这是从我自己的个人计算机上复制的(它跑出了 django 测试服务器))所以我不认为这是问题所在。这根本行不通:-(

感谢任何帮助,谢谢。

最佳答案

对于您的第一个问题,您确定在您指定的 PythonPath 中有 Django 吗?在我的服务器上,我的 PythonPath 中的列表包括包含顶级 django 目录的目录,该目录本身包含 bin、contrib、admin、core 等目录,此外还有 __init__.py。 (还要确保您的 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>

请注意,我在这里使用位置而不是目录,因此您的情况可能会有所不同。

对于你的第二个问题,这听起来像是 mod_rewrite 的问题。参见 here .您可以通过定义重写规则让服务器自动附加您需要的斜杠:

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

希望对您有所帮助。

关于django - 使用 mod_python 设置 Django,使用 Alias 在 SuSE 上设置 Apache,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/582631/

相关文章:

python - django-social-auth : connected successfully, 现在如何查询用户?

python - Django: 'module' 对象没有属性 'index'

python - django 方法是存在的,但是当我尝试调用它时评估为 NoneType

Apache https 反向代理与 Tomcat

PHP 警告 DOMDocument::loadHTML():第 10 行实体中的标记部分无效

perl - 为什么运行 Apache+FastCGI 的 Catalyst 应用程序不提供动态内容?

perl - 使用 mod_perl 编译 apache2 时出现问题

python - Django:动态添加应用程序作为插件,自动构建 url 和其他设置

django - Apache 不提供来自 Django 应用程序的静态文件

Apache SSL Remotestorage 服务器不工作