【问题标题】:Obtaining void template passing from django development server to apache server获取从 django 开发服务器到 apache 服务器的 void 模板
【发布时间】:2011-06-29 19:41:21
【问题描述】:

我有一个 django 应用程序,可以在 django 开发服务器下完美运行。现在我正在尝试使用 mod_wsgi 在 apache2.2 下运行它。
在我添加的 apache 的 httpd.conf 文件中:

<IfModule wsgi_module>
    WSGIScriptAlias /index my_path_to_wsgi_modules/django.wsgi
</IfModule>

django.wsgi 模块包含 django 文档中解释的所有基本配置:http://docs.djangoproject.com/en/dev/howto/deployment/modwsgi/
不幸的是,当我运行服务器并尝试访问主页时,我获得了模板页面,但其中没有可变数据。服务器日志显示:

[Fri Feb 18 13:50:33 2011] [error] [client 127.0.0.1] File does not exist: /usr/local/apache2/htdocs/api, referer: http://127.0.0.1/example/


正如我之前所说的,奇怪的是相同的代码在 django 开发服务器下完美运行。我是编程网络应用程序的新手,请问有人可以帮忙吗?

我的 django.wsgi 文件如下所示:

导入操作系统 导入系统

从 os.path 导入 sep

basepath = '/home/example/WorkSpace/examplews/src'

sys.path.append(basepath)
sys.path.append('/home/example/WorkSpace/examplews/src/examplews')

os.environ['DJANGO_SETTINGS_MODULE'] = 'examplews.settings'

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

还有我的 httpd.con 文件,像这样:

ServerRoot "/usr/local/apache2"

听 80

LoadModule wsgi_module modules/mod_wsgi.so

用户阿帕奇
组apache

ServerAdmin 示例@domain.com

DocumentRoot "/usr/local/apache2/htdocs"

&lt;Directory /&gt;
选项 FollowSymLinks
AllowOverride None
订单拒绝,允许
全部拒绝
&lt;/Directory&gt;

&lt;Directory "/usr/local/apache2/htdocs"&gt;
选项索引 FollowSymLinks

AllowOverride None

命令允许,拒绝
全部允许

&lt;/Directory&gt;

&lt;IfModule dir_module&gt;
DirectoryIndex index.html index.php index.sh default.jsp
&lt;/IfModule&gt;

&lt;FilesMatch "^\.ht"&gt;
订单允许,拒绝
全部拒绝
满足所有
&lt;/FilesMatch&gt;

错误日志“日志/错误日志”

日志级别警告

&lt;IfModule log_config_module&gt;
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" 组合
LogFormat "%h %l %u %t \"%r\" %>s %b" 常见

&lt;IfModule logio_module&gt;
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
&lt;/IfModule&gt;
CustomLog "logs/access_log" common

&lt;/IfModule&gt;

&lt;IfModule alias_module&gt;
&lt;/IfModule&gt;

&lt;IfModule cgid_module&gt;
&lt;/IfModule&gt;

&lt;IfModule wsgi_module&gt;
WSGIScriptAlias /main /home/example/WorkSpace/examplews/src/examplews/apache_conf/django.wsgi
&lt;/IfModule&gt;
&lt;Directory "/home/example/WorkSpace/examplews/src/examplews/apache_conf"&gt;
订单允许,拒绝
全部允许
&lt;/Directory&gt;
DefaultType text/plain

&lt;IfModule mime_module&gt;
TypesConfig conf/mime.types
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
&lt;/IfModule&gt;

&lt;IfModule ssl_module&gt;
内置 SSLRandomSeed 启动
SSLRandomSeed 连接内置
&lt;/IfModule&gt;

【问题讨论】:

  • /usr/local/apache2/htdocs/api 真的存在吗?也许 Apache 中的其他东西配置错误。
  • 不,/usr/local/apache2/htdocs/api 它不存在。实际上它是一个虚拟 URL,应该通过 django urls.py 访问
  • 请发布您的完整 Apache 配置和 wsgi 文件。
  • 我已经在上面发布了我的 django.wsgi 和我的 httpd.conf。非常感谢!

标签: python django apache mod-wsgi django-urls


【解决方案1】:

最后我发现了错误。它没有连接到 httpd.conf 文件,而是连接到如何为 django urls.py 文件和模板指定 URL。
当我以这种方式安装 myapp 时:

WSGIScriptAlias /myapp my_path_to_wsgi_module/django.wsgi

我认为 django 模板文件中指定的 URL 应该带有一个初始斜杠,如下所示: '/api/dir'
结果是,通过这种方式,应用程序只能在 django 开发服务器上运行,而不能在 apache 上运行。

相反,如果您使用没有初始斜杠的 URL,例如:
'api/dir'
该应用程序在 django 开发服务器和 apache 上都能正常运行!

即使在 django urls.py 文件的模式匹配上,您也必须避免使用斜杠:
像这样:(r'^api/dir$', 'available_services')
而不是这样:(r'^/api/dir$', 'available_services')

也许这对于 django 专家用户来说是显而易见的事情,但如果你像我一样是新手,这可能会让你失去一定的时间,因为这是一个很难被发现的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-05
    • 1970-01-01
    • 2018-06-09
    • 2018-09-06
    • 2012-06-13
    • 2012-03-24
    • 2018-04-04
    相关资源
    最近更新 更多