Heroku & Django: "OSError: нет такого файла или каталога: '/app/{myappname}/static'"

У меня есть приложение Django на Heroku. У меня возникают проблемы со статическими файлами (они загружаются в один Heroku environment, но не другие), поэтому я попробовал команду debug, рекомендованную здесь.

$ heroku run python manage.py collectstatic --noinput
Running `python manage.py collectstatic --noinput` attached to terminal... up, run.8771
OSError: [Errno 2] No such file or directory: '/app/{myappname}/static'

Вот мои настройки .py, то же самое, что рекомендует Героку:

import os
import os.path

BASE_DIR = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = 'staticfiles'
STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)

Я получаю сообщение о том, действительно ли у меня есть каталог "статический" на корневом уровне в моем репозитории Git (проверен в обоих направлениях).

Любые идеи?

Ответ 1

Он ищет папку с именем "static", которая находится рядом с параметром settings.py, то есть в папке проекта, а не в корне репо git.

git root/
git root/{app name}
git root/{app name}/settings.py
git root/{app name}/static/         <- this is what you're missing

Обратите внимание, что пустые папки не отслеживаются git, поэтому вам нужно будет поместить пустой файл, если он пуст. Кроме того, удалите параметр STATICFILES_DIRS, пока он вам не понадобится.

Ответ 2

У меня была такая же проблема, и вот решение, которое сработало для меня:

Я изменил:

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)

в

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'myappfolder/static'),
)

Ответ 3

@joerick ответ выше - вещь. Однако, если вы не хотите размещать другую "статическую" папку (git root/{ваше приложение}/статические), вам может потребоваться изменить переменную BASE_DIR, которая изначально предоставляется django-admin makeproject:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

который является только каталогом (git root/)