Heroku с whitenoise не обслуживает статические файлы django

Как заставить heroku обслуживать статические файлы в моем проекте django?

Ок, на push в heroku, я получаю это сообщение, связанное со staticfiles:

$ python manage.py collectstatic --noinput
remote:        130 static files copied to '/tmp/build_48c64d55/staticfiles', 410 post-processed.

Но когда я захожу на свой сайт, я вижу, что статические файлы не распознаются, а вкладка Network показывает мне:

GET https://pure-everglades-09529.herokuapp.com/static/style.css   404 Not Found

Вот содержание моего html со ссылкой на css, который я не могу найти:

<!DOCTYPE html>
{% load static %}
<html lang="en">
<head>
    <link rel="stylesheet" type="text/css" href="{% static 'style.css' %}">
    <title>{% block title %}My amazing site{% endblock %}</title>
</head>

Вот нижняя часть моего settings.py, который настроен так, как везде написано, что он должен быть таким:

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.0/howto/static-files/

STATIC_ROOT = os.path.join(PROJECT_ROOT, 'staticfiles')
STATIC_URL = '/static/'

# Extra places for collectstatic to find static files.
STATICFILES_DIRS = [
    os.path.join(PROJECT_ROOT, 'static'),
]

# Simplified static file serving.
# https://warehouse.python.org/project/whitenoise/
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

# Activate Django-Heroku.
django_heroku.settings(locals())

Вот выше в моих настройках, я добавил зависимости whitenoise, как рекомендуется везде:

INSTALLED_APPS = [
    'myapp.apps.MyappConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    # Disable Django's own staticfiles handling in favour of WhiteNoise, for
    # greater consistency between gunicorn and `./manage.py runserver`. See:
    # http://whitenoise.evans.io/en/stable/django.html#using-whitenoise-in-development
    'whitenoise.runserver_nostatic',
    'django.contrib.staticfiles',
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
...
]

Наконец, вот мои урлы, где я добавил статические урлы, но только для моего локального окружения:

urlpatterns = [
    path('', include('myapp.urls')),
    path('admin/', admin.site.urls),
]

if 'Owner' in settings.BASE_DIR:
    urlpatterns = urlpatterns + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) + static(settings.MEDIA_URL, document_root=setting

Что я делаю неправильно? Это потому что у меня DEBUG=True в настройках? Я установил значение False для проверки, но получил ошибку 500

Очевидно

# Extra places for collectstatic to find static files.
STATICFILES_DIRS = [
    os.path.join(PROJECT_ROOT, 'static'),
]

нужно быть

# Extra places for collectstatic to find static files.
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]

статические файлы по-прежнему создаются в правильном месте, возможно, из-за того, что переменные VARIABLES перезаписываются

django_heroku.settings(locals())
Вернуться на верх