Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Django应用程序部署到Heroku时出现静态文件问题_Django_Heroku - Fatal编程技术网

将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'