将Django应用程序部署到Heroku时出现静态文件问题
我的项目文件夹如下所示:将Django应用程序部署到Heroku时出现静态文件问题,django,heroku,Django,Heroku,我的项目文件夹如下所示: ├── Procfile ├── core │ ├── __init__.py │ ├── __pycache__ │ │ ├── __init__.cpython-39.pyc │ │ └── views.cpython-39.pyc │ ├── admin.py │ ├── apps.py │ ├── migrations │ │ └── __init__.py │ ├── models.py │ ├── test
├── Procfile
├── core
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-39.pyc
│ │ └── views.cpython-39.pyc
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── db.sqlite3
├── inspirationSources.txt
├── manage.py
├── package-lock.json
├── package.json
├── react-frontend
│ ├── README.md
│ ├── build
│ │ ├── asset-manifest.json
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ ├── logo192.png
│ │ ├── logo512.png
│ │ ├── manifest.json
│ │ ├── robots.txt
│ │ └── static
│ ├── package-lock.json
│ ├── package.json
│ ├── public
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ ├── logo192.png
│ │ ├── logo512.png
│ │ ├── manifest.json
│ │ └── robots.txt
│ └── src
│ ├── App.css
│ ├── App.js
│ ├── App.test.js
│ ├── assets
│ ├── components
│ ├── hooks
│ ├── index.css
│ └── index.js
├── requirements.txt
├── spotify
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-39.pyc
│ │ ├── admin.cpython-39.pyc
│ │ ├── apps.cpython-39.pyc
│ │ ├── cluster.cpython-39.pyc
│ │ ├── credentials.cpython-39.pyc
│ │ ├── models.cpython-39.pyc
│ │ ├── urls.cpython-39.pyc
│ │ ├── util.cpython-39.pyc
│ │ └── views.cpython-39.pyc
│ ├── admin.py
│ ├── apps.py
│ ├── cluster.py
│ ├── credentials.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── __init__.py
│ │ └── __pycache__
│ ├── models.py
│ ├── templates
│ ├── tests.py
│ ├── urls.py
│ ├── util.py
│ └── views.py
├── spotifycluster
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-39.pyc
│ │ ├── settings.cpython-39.pyc
│ │ ├── urls.cpython-39.pyc
│ │ └── wsgi.cpython-39.pyc
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── tutorialSources.txt
当我使用git-push-heroku-main
进行部署时,这似乎很好,但当我使用补充url在浏览器中打开应用程序时,我在屏幕上看到以下错误(调试模式打开):
我的settings.py中有以下设置
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
我的中间件列表中也有whitenoise
MIDDLEWARE = [
'whitenoise.middleware.WhiteNoiseMiddleware',
...]
settings.py中的模板部分如下所示
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'react-frontend')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
我希望Heroku能够根据static_DIRS变量找到静态文件夹,但事实似乎并非如此。有什么线索吗?如果您的
DEBUG
设置为False
Django
无法处理静态文件
Heroku
提供一些配置来服务静态文件
步骤1:安装whitenoise
$ pip install whitenoise
步骤2:签入settings.py
whitenoise中间件默认情况下,它在middleware\u类中可用,如果不是那样,请添加它
MIDDLEWARE = (
'whitenoise.middleware.WhiteNoiseMiddleware',
...)
步骤3:将此项添加到您的设置.py
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
所以实际上这是一个非常愚蠢的错误。react前端是一个损坏的子模块,我需要通过确保.git/config没有子模块并从缓存中删除react前端()来修复它。提交并再次推送,结果成功了…我在middleware=[]中安装了whitenoise.middleware.WhiteNoiseMiddleware以及其他中间件。我使用的是中间件还是中间件类有关系吗?我的坏中间件类
在较旧版本的Django
中使用检查我编辑了我的答案。对于wsgi
配置,您可以查看官方文档。“您的WhiteNoise配置与WhiteNoise v4.0不兼容”更多信息表明,我不应该像您建议的那样操纵wsgi.py。
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'