2013-10-11 6 views
22

Ich habe eine Django App auf Heroku. Ich habe einige Probleme mit statischen Dateien (sie laden in einem Heroku environment, aber nicht andere), also versuchte ich den Debug-Befehl empfohlen here.Heroku & Django: "OSError: Keine solche Datei oder Verzeichnis: '/ app/{myappname}/static'"

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

Hier ist meine settings.py, die die gleiche Sache Heroku empfiehlt ist:

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

ich den Fehler, ob ich tatsächlich ein Verzeichnis „statisch“ auf der Stammebene in meinem Git Repo (getestet in beide Richtungen).

Irgendwelche Ideen?

+0

Können Sie Ihre INSTALLED_APPS posten? – fasouto

Antwort

41

Es ist auf der Suche nach einem Ordner mit dem Namen "statisch", der neben der settings.py ist, d. H. Im Projektordner, nicht im Stammverzeichnis des Git Repo.

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

Beachten Sie, dass leere Ordner werden nicht von git verfolgt, so dass Sie in eine leere Datei setzen müssen werde, wenn es leer ist. Alternativ können Sie die Einstellung STATICFILES_DIRS entfernen, bis Sie sie benötigen.

+0

Ich hatte das gleiche Problem auf einer Heroku-Site, und das einzige, was fehlte, war eine leere .gitignore-Datei! –

+1

Fast nichts funktionierte für mich, außer dem letzten Punkt "Alternativ, entfernen Sie die STATICFILES_DIRS Einstellung, bis Sie es brauchen", die alles wunderbar funktionierte. Heroku würde nicht "statisch" sammeln, bis diese Linie weg war. – CoderOfTheNight

9

Ich hatte gerade das gleiche Problem, und hier ist die Lösung, die für mich gearbeitet:

I geändert:

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

zu:

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

Das funktionierte auch für mich, obwohl mein Pfad das Verschieben eines Verzeichnisses erforderte: 'os.path.join (BASE_DIR, '../ myappfolder/static')' – Joseph

+0

So gut! Danke euch beiden . – glaucon

+0

@Joseph Danke ../myappfolder/static arbeitete für mich. – pavanw3b

1

@ Antwort des joerick oben ist die Sache . Wenn Sie jedoch keine andere 'statische' Ordner (git root/{Ihre app}/statisch) platzieren möchten, sollten Sie überlegen, die BASE_DIR Variable ändern, die ursprünglich von django-admin makeproject geliefert:

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

Welches ist nur das Verzeichnis (git root /)

Verwandte Themen