Django - manage.py сборник статического сохранения в неправильную папку - PullRequest
1 голос
/ 14 октября 2019

Обновление: похоже, что это вызвано пакетом django-heroku и, в частности, унаследованным пакетом whitenoise, который в документации говорит, что вы должны поставить

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

в концефайла настроек, который я никогда не делал, но он все еще заставляет root быть папкой «staticfiles» вместо папки с ресурсами

Исходное сообщение:

Когда я запускаю python manage.pycollectstatic сохраняет в папку с именем staticfiles

Я должен был что-то сделать, чтобы это произошло, но я искал staticfiles и не нашел ссылки на него, кроме django.contrib.staticfiles.

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

INSTALLED_APPS = [
    #some apps
    'django.contrib.staticfiles',
#some more apps

    'tz_detect',
]

# some more code

STATIC_URL = '/static/'

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static')
]
VENV_PATH = os.path.dirname(BASE_DIR)

STATIC_ROOT = os.path.join(BASE_DIR, 'assets')

MEDIA_URL = '/media/'

MEDIA_ROOT = os.path.join(VENV_PATH, 'media_root')

Ожидается, что при запуске Python manage.py collectstatic будет создана папка ресурсов, но этого не произойдет.

Папка staticfiles помимо файлов из статической папки также содержит папку tz_detect (из статических ресурсов из стороннего пакета), папку администратора и staticfiles.json

раздел middleware settings.py

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware',
    # some more middleware
    'tz_detect.middleware.TimezoneMiddleware',  
]

1 Ответ

1 голос
/ 14 октября 2019

Похоже, что невозможно изменить имя вашего STATIC_ROOT, используя django_heroku, без исправлений обезьяны пакета.

Линия django_heroku.settings(locals()) принимает вселокальные переменные (то есть STATIC_ROOT) и передает их в функцию settings, найденную в django_heroku/core.py.

Если вы посмотрите на строку 89:

config['STATIC_ROOT'] = os.path.join(config['BASE_DIR'], 'staticfiles')

Вы увидите, что какое бы значение вы ни установили для STATIC_ROOT, пакет переопределит его с помощью staticfiles.

Обратите внимание , что следующие могут иметь непредвиденные последствия, и вы не должны их делать.

Вот 2 обезьяна патч решения:

  • изменить значение STATIC_ROOT после вызова django_heroku.settings(locals()):
STATIC_ROOT = os.path.join(BASE_DIR, 'assets')
  • изменить django_heroku/core.py line 89: на следующее:
if 'STATIC_ROOT' not in config:
    config['STATIC_ROOT'] = os.path.join(config['BASE_DIR'], 'staticfiles')

это предотвратит djano_heroku переопределение STATIC_ROOT, если вы уже его определили.

Опять же, я не рекомендую делать это, потому что может веская причина, по которой Heroku заставляет вас использовать имя staticfiles, и это может привести к поломке вашего сервера, или, что еще хуже, к частям вашего сервера может произойти сбой (что означает, что отладка станет кошмаром).

...