Статические файлы не работают с Django, Heroku и Django Sass Processor - PullRequest
0 голосов
/ 24 февраля 2019

Я не могу заставить работать статические файлы при развертывании в Heroku.Я получаю 404s для всех файлов CSS и JS.

Вещи, которые я использую:

  • Django 2.1.5
  • whitenoise 4.1.2
  • django-sass-процессор 0.7.2
  • django-webpack-loader 0.6.0

Вот мои настройки:

Белоснежка находится в промежуточном программном обеспечении

MIDDLEWARE = [
'django.middleware.gzip.GZipMiddleware',
'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'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/'

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles/')
STATIC_SOURCE_ROOT = os.path.join(BASE_DIR, 'static/')

STATICFILES_DIRS = [
    STATIC_SOURCE_ROOT
]

STATICFILES_STORAGE = 'whitenoise.storage.CompressedStaticFilesStorage'

STATICFILES_FINDERS = [
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    'sass_processor.finders.CssFinder'
]

# Ensure STATIC_ROOT exists.
os.makedirs(STATIC_ROOT, exist_ok=True)

"""
Django Sass Processor
https://github.com/jrief/django-sass-processor

Template Usage:
{% load sass_tags %}

<link href="{% sass_src 'myapp/css/mystyle.scss' %}" rel="stylesheet" type="text/css" />
"""

SASS_PROCESSOR_INCLUDE_DIRS = [
    os.path.join(STATIC_SOURCE_ROOT, 'scss/')
]

SASS_PROCESSOR_ROOT = STATIC_ROOT
SASS_PROCESSOR_ENABLED = False

# Django Webpack Loader
# https://github.com/owais/django-webpack-loader

WEBPACK_LOADER = {
    'DEFAULT': {
        'BUNDLE_DIR_NAME': 'dist/',
        'STATS_FILE': os.path.join(BASE_DIR, 'webpack-stats-prod.json')
    }
}

DEBUG = False

Когда я иду к развертыванию, я выполняю следующие шаги:

  1. Запуск yarn run build Какие сборкиjs (я использую React, так что есть babel и тому подобное) и помещает его в «static / dist /» - который фиксируется в git

  2. Deploy to Heroku

    • У меня отключен колдстатик на герою, поэтому он не вызывается автоматически при развертывании
  3. Запуск на Heroku: heroku run python manage.py compilescss

    • Что, я считаю, должно скомпилировать scss в css и поместить файлы css рядом с файлами scss в 'static /'
  4. Запуск на Heroku: heroku run python manage.py collectstatic --ignore=*.scss

    • То, что я считаю, должно копировать все (кромеept .scss) из «static /» в «staticfiles /».Это должны быть все скомпилированные css-файлы и скомпилированные js.

Я играл с множеством настроек, но, похоже, ничего не работает, css и js получают 404.

Есть идеи?

1 Ответ

0 голосов
/ 25 февраля 2019

Я не использовал этот точный набор инструментов ранее, но я думаю, что вам повезет больше, если вы подойдете к этому так:

  1. Убедитесь, что ваше приложение настроено на запустить два пакета сборки .heroku/nodejs должен запускаться первым, а heroku/python - вторым.

    Поскольку вы вручную запускаете yarn, теперь я подозреваю, что это уже сделано.yarn не входит в сборку Python.

  2. Добавьте heroku-postbuild script к вашему package.json, который работает yarn build.Это должно привести к тому, что ваш код React будет собран во время развертывания после установки зависимостей Node.js.

  3. Повторное включение Heroku автоматический collectstatic на работает heroku config:unset DISABLE_COLLECTSTATIC.Я не думаю, что вам на самом деле нужно игнорировать файлы .scss.

Возможно, вы также захотите взглянуть на django-heroku, библиотеку Djangoот Heroku, которая помогает настроить развертывание на их платформе.Официально рекомендуется и может помочь решить проблемы HTTP 404.

...