2015-08-13 2 views
0

В моей основной директории проекта у меня есть каталог настроек, который имеет следующие файлы: local.py, base.py, production.py и __init__.py. При управлении collectstatic файлы сохраняются в staticfiles папку в директории проектаСтатические файлы Django и Heroku

local.py

STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage' 
# Static files (CSS, JavaScript, Images) 
# https://docs.djangoproject.com/en/1.8/howto/static-files/ 
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder', 
    'django.contrib.staticfiles.finders.AppDirectoriesFinder', 
) 

PROJECT_DIR = os.path.dirname(__file__) 

MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 

MEDIA_URL = '/media/' 

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

STATIC_URL = '/static/' 

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

base.py

STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage' 
# Static files (CSS, JavaScript, Images) 
# https://docs.djangoproject.com/en/1.8/howto/static-files/ 

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder', 
    'django.contrib.staticfiles.finders.AppDirectoriesFinder', 
) 


STATIC_URL = '/static/' 

PROJECT_DIR = os.path.dirname(__file__) 

MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 

MEDIA_URL = '/media/' 

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

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

production.py

import os 
from django.conf import settings 


DEBUG = False 
TEMPLATE_DEBUG = True 

# Parse database configuration from $DATABASE_URL 
import dj_database_url 
DATABASES['default'] = dj_database_url.config() 

# Honor the 'X-Forwarded-Proto' header for request.is_secure() 
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https') 

# Allow all host headers 
ALLOWED_HOSTS = ['*'] 


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

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

Когда я запускаю следующую команду: heroku run python manage.py collectstatic --noinput

Я получаю сообщение об ошибке: You're using the staticfiles app without having set the STATIC_ROOT setting to a filesystem path.

+3

Делайте то, что говорит сообщение об ошибке. 'STATIC_ROOT' должен быть каталогом вашей файловой системы, и вы получили его как веб-каталог. Вы имели в виду 'STATIC_ROOT = os.path.join (BASE_DIR, 'static')'? –

+0

Так следующий способ сделать это: 'STATIC_ROOT = os.path.join (base_dir, 'staticfiles') STATIC_URL = '/ статический /' STATICFILES_DIRS = ( os.path.join (base_dir,«статический '), ) ' –

+0

Я использую STATIC_ROOT = normpath (присоединяюсь (SITE_ROOT,' assets ')) лично, но похоже, что у вас есть предложение TBA. Кроме того, взгляните на [Django Whitenoise] (https://github.com/evansd/whitenoise) – bwarren2

ответ

0

Хороший шаблон/руководство для развертывания на Heroku является here.

Взгляните на их settings.py torwards конец ::

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

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

# Simplified static file serving. 
# https://warehouse.python.org/project/whitenoise/ 
STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage' 
+0

Спасибо за ваш ответ. Однако он все еще не работает. Это дает мне ту же ошибку. –

0

Не использовать относительный путь в STATIC_ROOT в файле production.py.

Используйте это как ваш займетесь в base.py

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') 
Смежные вопросы