2014-05-13 169 views
3

我有一個Django應用程序可以在本地運行靜態文件。當我推送到Heroku時,它正在尋找位於不同位置的靜態文件(home/www_dev/www_dev/settings/static)。Django Heroku靜態設置

文件結構:

home 
> www_dev 
>>> organizations (my app) 
>>> static 
>>> www_dev 
>>>>> settings 

base.py設置:(Django的使用模板的兩勺)

STATIC_ROOT = normpath(join(SITE_ROOT, 'assets')) 
STATIC_URL = '/static/' 
STATICFILES_DIRS = (
    normpath(join(SITE_ROOT, 'static')), 
) 
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder', 
    'django.contrib.staticfiles.finders.AppDirectoriesFinder', 
) 

production.py設置(使用Heroku的文檔)

# Static asset configuration 
import os 
BASE_DIR = os.path.dirname(os.path.abspath(__file__)) 
STATIC_ROOT = 'staticfiles' 
STATIC_URL = '/static/' 

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

wsgi.py

import os 
from os.path import abspath, dirname 
from sys import path 

SITE_ROOT = dirname(dirname(abspath(__file__))) 
path.append(SITE_ROOT) 

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "www_dev.settings.production") 

from django.core.wsgi import get_wsgi_application 
from dj_static import Cling 

application = Cling(get_wsgi_application()) 

Procfile

web: gunicorn --pythonpath www_dev www_dev.wsgi -b 0.0.0.0:$PORT 

嘗試添加到其他每個堆棧溢出職位urls.py,沒有工作:

if not settings.DEBUG: 
    urlpatterns += patterns('', 
     (r'^static/(?P<path>.*)$', 'django.contrib.staticfiles.views.serve', {'document_root': settings.STATIC_ROOT}), 
    ) 

Heroku erro R:

-----> Preparing static assets 
     Collectstatic configuration error. To debug, run: 
     $ heroku run python ./www_dev/manage.py collectstatic --noinput 

運行collectstatic結果:

OSError: [Errno 2] No such file or directory: '/app/www_dev/www_dev/settings/static' 

我願意只是去S3,如果我解決不了這個問題,但很難找到一個好的工作流程推靜( CSS/JS)本地S3與django-storages和boto。將在S3上擁有所有媒體。任何幫助深表感謝!

回答

2

改變你的設置STATIC_ROOT/production.py

如果您不需要使用不同的靜態根目錄下,你可以簡單地刪除,因爲它已經在設置/ base.py被定義的變量

heroku doc假定您使用哪種定位在PROJECT_DIR/settings.py一個settings.py文件。

+0

這時候,我刪除了所有的production.py的設置工作:刪除BASE_DIR,STATIC_ROOT,STATIC_URL和STATICFILES_DIRS從Heroku的靜態資產配置,因爲他們在base.py.被定義 –