web-dev-qa-db-fra.com

Heroku & Django: "OSError: Aucun fichier ou répertoire de ce type: '/ app / {myappname} / static'"

J'ai une Django sur Heroku. J'ai des problèmes avec les fichiers statiques (ils se chargent dans un Heroku environnement mais pas dans un autre), j'ai donc essayé le débogage commande recommandée ici .

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

Voici mon settings.py, qui est la même chose que Heroku recommande:

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'),
)

J'obtiens l'erreur si j'ai réellement un répertoire "statique" au niveau racine dans mon dépôt Git (testé dans les deux sens).

Des idées?

32
RexE

Il recherche un dossier nommé `` statique '' à côté du fichier settings.py, c'est-à-dire dans le dossier du projet, pas à la racine du dépôt git.

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

Notez que les dossiers vides ne sont pas suivis par git, vous devrez donc y mettre un fichier vierge s'il est vide. Vous pouvez également supprimer le STATICFILES_DIRS réglage jusqu'à ce que vous en ayez besoin.

46
joerick

Je viens d'avoir ce même problème, et voici la solution qui a fonctionné pour moi:

J'ai changé:

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

à:

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

@ réponse de joerick ci-dessus est la chose. Cependant, si vous ne souhaitez pas placer un autre dossier 'statique' (git root/{votre application}/statique), vous pourriez envisager de changer la variable BASE_DIR qui est initialement fournie par Django-admin makeproject:

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

qui est juste le répertoire (git root /)

1
Dima