django - Django + Gunicorn + SCRIPT_NAME
问题描述
我有许多 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 容器中运行)我可以去
http://127.0.0.0:8000/demo
。它按预期加载应用程序主页。Page1链接显示为
http://127.0.0.0:8000/demo/page1
,我单击它,它按预期将我带到Page1主页链接显示为
http://127.0.0.0:8000/demo/demo/
。它复制了 SCRIPT_NAME 并且链接不起作用。
任何想法我做错了什么?这是为了工作吗?
解决方案
您需要在服务器启动命令行中将“SCRIPT_NAME=demo”替换为“SCRIPT_NAME=/demo”(注意附加的斜杠)。
推荐阅读
- angular - 错误:无法处理请求 Angular 9 Universal + Firebase Function
- firebase - 我可以使用 Firebase 的身份验证来保护我自己的私有服务器上的数据吗?
- python - 我如何从屏幕pygame的每一侧产生敌人?
- oauth-2.0 - OpenID Connect:如何在客户端凭证流中添加自定义声明数据
- maven - 术语“测试”未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。YML 文件
- android - 如何将字体样式添加到textview android kotlin
- html - svg边框中的iframe响应
- python-3.x - 完整的 Jupyter Notebook 性能分析
- maven-plugin - 如何在 liquibase 的另一个主更改日志文件中包含主更改日志文件
- reactjs - React 功能组件中的道具没有被玩笑所涵盖