gpt4 book ai didi

django - 当我将 Django 应用程序部署到 Heroku 时,为什么 collectstatic 不会自动运行?

转载 作者:行者123 更新时间:2023-12-04 18:43:30 24 4
gpt4 key购买 nike

我关注了官方Heroku docs on Django and Static Assets ;我已经安装了dj-static并将其添加到我的requirements.txt文件,正确配置我的 settings.py 中的所有变量文件:

STATIC_ROOT = os.path.join(CONFIG_ROOT, 'served/static/')                       
STATIC_URL = '/static/'

STATICFILES_DIRS = (
os.path.join(CONFIG_ROOT, 'static'),
)

这就是我的 wsgi.py好像:
import os                                                                       
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "my_django_project.settings")

from django.core.wsgi import get_wsgi_application
from dj_static import Cling
application = Cling(get_wsgi_application())
Procfile的内容:
web: gunicorn --bind 0.0.0.0:$PORT my_django_project.wsgi:application 

在文档中,它说“collectstatic 在正确配置后会自动运行”。但是当我导航到我的网站时,显然没有 css。

我试过 debugging使用 heroku run ,但这只是按预期复制静态文件。

我注意到当我包含 collectstatic我的 Procfile 中的命令, IE。
web: python my_django_project/manage.py collectstatic --noinput ; gunicorn -b 0.0.0.0:$PORT my_django_project.wsgi:application

...按预期工作,并提供静态文件。

然而奇怪的是当我运行 heroku run bash并查看 STATIC_ROOT 的目录指着,那里什么都没有!事实上,整个 served/目录丢失,但静态文件仍在提供服务!

我还是想知道为什么不是 collectstatic但是,当我将 Django 应用程序部署到 Heroku 时,它会自动运行——就像文档中提到的那样。

最佳答案

看起来您可能正在为 Heroku/production 使用特定的设置模块。此外,您已设置环境变量 DJANGO_SETTINGS_MODULE指向这个设置模块(这样,当应用程序运行时,Django 知道使用那个,而不是你的默认/开发模块)。最后,您可能已经在 Heroku/production 设置模块中配置了静态 Assets 设置(可能是 STATIC_ROOT)。

好的,如果这一切都正确,那么问题来了: heroku 环境变量仅在服务时设置,而不是在编译时设置 .这很重要,因为 collectstatic是编译时操作对于 Heroku。 (当您推送时,Heroku 经历了 2 个阶段:1)编译,这涉及设置应用程序( collectstaticsyncdb 等)2)服务,您的应用程序的正常操作)。

因此,基本上,您已经正确完成了所有操作,但 Heroku 并未将您的环境变量(包括您对不同设置模块的规范)暴露给 collectstatic。 .

要将环境变量设置为编译时,请启用 Heroku 的 user-env-compile实验室功能如下:

heroku labs:enable user-env-compile

我认为默认情况下这是一件愚蠢的事情,并且有兴趣了解 Heroku 为何认为这是一个好主意。

关于django - 当我将 Django 应用程序部署到 Heroku 时,为什么 collectstatic 不会自动运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19413149/

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