【问题标题】:Django + Gunicorn + SCRIPT_NAMEDjango + Gunicorn + SCRIPT_NAME
【发布时间】:2019-01-24 02:09:14
【问题描述】:

我有许多 django 应用程序在同一个域中运行,但在让 SCRIPT_NAME 与 Gunicorn 正常工作时遇到问题。

示例应用路径:

  • www.domain.com/app1
  • www.domain.com/demo

场景 1:我目前让每个应用程序都在 Elastic Beanstalk 上运行,并修改 apache 配置以处理 SCRIPT_NAME 方面的问题。这行得通。

场景 2: 我一直在使用 AWS ECS/FARGATE 进行测试,在该配置中我只有一个运行 Django/Gunicorn 的容器。没有 Apache/Nginx 等。我打算只使用 Django/Gunicorn/Whitenoise/Cloudfront。 这不起作用。使 django 使用子路径的 SCRIPT_NAME 值重复。

为了简化/排除故障,我在本地运行以下代码/命令,因此不涉及 AWS。我还创建了一个简单的 django 应用程序进行测试。

我的应用页面结构是这样的:

  • 首页
    • 第1页链接<a href="{% url 'demo:page1' %}">Page1</a>
      • 首页链接<a href="{% url 'demo:home' %}">Home</a>
    • 第2页链接<a href="{% url 'demo:page2' %}">Page2</a>
      • 首页链接<a href="{% url 'demo:home' %}">Home</a>

步骤:

  1. 我启动网络服务器: gunicorn config.wsgi --env SCRIPT_NAME=demo -b 0.0.0.0:80 --keep-alive 20 --log-file=- --log-level debug --capture-output(在 docker 容器中运行)

  2. 我可以去http://127.0.0.0:8000/demo。它按预期加载应用主页。

  3. Page1 链接显示为http://127.0.0.0:8000/demo/page1,我点击后按预期将我带到Page1

  4. 主页链接显示为http://127.0.0.0:8000/demo/demo/。它复制了 SCRIPT_NAME,链接失效。

任何想法我做错了什么?这是为了工作吗?

【问题讨论】:

    标签: django gunicorn


    【解决方案1】:

    您需要在服务器启动命令行中将“SCRIPT_NAME=demo”替换为“SCRIPT_NAME=/demo”(注意附加的斜杠)。

    【讨论】:

      猜你喜欢
      • 2022-08-12
      • 2021-11-07
      • 2013-03-25
      • 2013-03-01
      • 2012-09-09
      • 2014-06-19
      • 2021-03-19
      • 2017-03-28
      • 2012-08-17
      相关资源
      最近更新 更多