gpt4 book ai didi

python - Webfaction apache + mod_wsgi + django 配置问题

转载 作者:行者123 更新时间:2023-11-28 22:07:00 25 4
gpt4 key购买 nike

我最近偶然发现的一个问题,即使我解决了它,我也想听听您对正确/简单/采用的解决方案的看法。

我正在使用 Django + python 开发网站。当我使用“python manage.py runserver”在本地机器上运行它时,本地地址是 http://127.0.0.1:8000/默认情况下。

但是,在生产服务器上,我的应用程序有其他 url,路径 - 如“http://server.name/myproj/

我需要生成并使用永久 URL。如果我使用 {% url view params %},我会得到相对于/的路径,因为我的 urls.py 包含这个

urlpatterns = patterns('',
(r'^(\d+)?$', 'myproj.myapp.views.index'),
(r'^img/(.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT + '/img' }),
(r'^css/(.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT + '/css' }),
)

到目前为止,我看到了 2 种解决方案:

  1. 修改urls.py,在生产运行的情况下包括'/myproj/'
  2. 使用 request.build_absolute_uri() 在 vi​​ews.py 中创建链接或在模板中使用“hostname:port/path”传递一些变量

有没有更好的方法来处理这个问题?谢谢。

更新:嗯,问题似乎不在django,而是在webfaction方式配置wsgi。 URL 为“hostname.com/myapp”的应用程序的 Apache 配置包含以下行

WSGIScriptAlias / /home/dreamiurg/webapps/pinfont/myproject.wsgi

因此,SCRIPT_NAME 是空的,我看到的唯一解决方案是进入 mod_python 或从 root 为我的应用程序提供服务。有什么想法吗?

最佳答案

您不需要做任何特别的事情。 Django 尊重 SCRIPT_NAME 环境变量,该变量由 mod_wsgi 设置,当您从根目录之外提供 Django 站点时,并自动将其添加到 url 反向代码中。

如果您正在使用 mod_python(您不应该使用),您可能需要在 Apache 配置中设置 django.root

已更新 我怀疑这是由于 Webfaction 通过 Apache 的代理实例为 Django 站点提供服务的方式——该实例不知道由 Webfaction 的控制面板确定的实际挂载点。

在这种情况下,您可能需要在 .wsgi 脚本中手动设置 SCRIPT_NAME。我认为这应该有效:

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

def application(environ, start_response):
os.environ['SCRIPT_NAME'] = '/myproj/'
return _application(environ, start_response)

关于python - Webfaction apache + mod_wsgi + django 配置问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2729368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com