我有许多django应用程序都运行在同一域之外,但是在使SCRIPT_NAME与Gunicorn正常工作时遇到问题。
示例应用路径:
场景1::我目前在Elastic Beanstalk上运行每个应用程序,并修改apache配置以处理SCRIPT_NAME方面的问题。这行得通。
场景2::我一直在使用AWS ECS / FARGATE进行测试,在该配置中,我只有一个运行Django / Gunicorn的容器。没有Apache / Nginx等。我打算只使用Django / Gunicorn / Whitenoise / Cloudfront。 这不起作用。正在使django与子路径一起工作的SCRIPT_NAME值正在复制。
为简化/故障排除,我在本地运行以下代码/命令,因此不涉及AWS。我还创建了一个简单的django应用程序进行测试。
我的应用页面结构如下:
<a href="{% url 'demo:page1' %}">Page1</a>
<a href="{% url 'demo:home' %}">Home</a>
<a href="{% url 'demo:page2' %}">Page2</a>
<a href="{% url 'demo:home' %}">Home</a>
步骤:
我启动Web服务器:
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,并且该链接无效。
有什么主意我做错了吗?这是要工作吗?
答案 0 :(得分:0)
您需要在服务器启动命令行中将“ SCRIPT_NAME = demo”替换为“ SCRIPT_NAME = / demo”(请注意其他斜杠)。