collectstatic whitenoise在部署到heroku时看不到我现有的文件

问题描述

我一直在努力对应用程序进行多次推送以在heroku上进行部署,但一切都很好,但是当我为django应用程序添加设置以使用cloudinary将上传文件存储在生产白噪声中时,却无法看到存在于其中的文件。我的项目中,我尚未对静态文件进行任何更改,并且以前对heroku的推送都还不错,但是现在,一旦部署的collectstatic部分开始出现白噪声,便会出现一个问题,即看不到我的文件,但它们的路径仍然可以,并且什么也没有已在静态文件中更改

我不确定是否是导致这种情况的云设置

settings.py

...


INSTALLED_APPS = [
    # my apps
    'user.apps.UserConfig','store.apps.StoreConfig','pages.apps.PagesConfig','django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','whitenoise.runserver_nostatic','cloudinary_storage','django.contrib.staticfiles','django.contrib.sites',# 3rd party apps
    'crispy_forms','allauth','allauth.account','allauth.socialaccount','cloudinary',#'djangorave',#providors
    'allauth.socialaccount.providers.facebook','allauth.socialaccount.providers.google',]

...

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware','whitenoise.middleware.WhiteNoiseMiddleware','django.middleware.common.CommonMiddleware','django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware',]

....


STATIC_URL = '/static/'
STATICFILES_Dirs = [os.path.join(BASE_DIR,'static')]
STATIC_ROOT = os.path.join(BASE_DIR,'static_root')
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesstorage'


CLOUDINARY_STORAGE = {
    'CLOUD_NAME': 'YOUR_CLOUD_NAME','API_KEY': 'YOUR_API_KEY','API_SECRET': 'YOUR_API_SECRET',}

DEFAULT_FILE_STORAGE = 'cloudinary_storage.storage.MediaCloudinaryStorage'

显示存在问题文件的项目文件结构

enter image description here

部署到heroku时出错

enter image description here

解决方法

很显然,根据dj3-cloudinary-storage文档,我错过了一个小细节,如果只有一个人希望cloudinary处理媒体文件,那么应用程序“ cloudinary_storage”, 如下所示,“ cloudinary”位于INSTALLED_APPS中的“ django.contrib.staticfiles”下方

INSTALLED_APPS = [
    # ...
    'django.contrib.staticfiles','cloudinary_storage','cloudinary',# ...
] 

如果完成了文档中显示的第一个排列选项,其中“ cloudinary_storage”位于“ django.contrib.staticfiles”之前,则它会覆盖collectstatic命令,从而导致我在上面遇到的问题

参考:https://pypi.org/project/dj3-cloudinary-storage/

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...