2014-01-15 3 views
14

전적으로 괜찮은 "git push heroku master"를 사용하여 heroku에 django 응용 프로그램을 배포했습니다. heroku의 Django 정적 파일

난 후 Heroku가이 두번째 앱 -r 스테이징 '

만들기'사용하여 동일한 자식 상에 제 2 응용 프로그램을 생성하고 사용하는 푸쉬 : 자식 푸시 스테이지 마스터

를 I는 두 번째 애플리케이션을 열 때 전혀 정적 파일을 집어 또는로드 (즉, 어떤 CSS는, JS, 또는 이미지 작업)이 매우 혼란

! - 도와주세요

내 설정 파일은

아래입니다 691,363,210
import os 
import platform 
import dj_database_url 

DEBUG = True 
TEMPLATE_DEBUG = DEBUG 

# This should work for any deployment 
BASE_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), '..')) 

ADMINS = (
    ('me', '[email protected]'), 
) 

MANAGERS = ADMINS 
# LOCAL SETTINGS 
if platform.system() in ['Windows', 'Darwin']: 
    #EV = 'LOCAL' 
    DATABASES = { 
      'default': { 
       'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'. 
       'NAME': BASE_DIR + '//db//db.sqlite3', 
       'USER': '',      # Not used with sqlite3. 
       'PASSWORD': '',     # Not used with sqlite3. 
       'HOST': '',      # Set to empty string for localhost. Not used with sqlite3. 
       'PORT': '',      # Set to empty string for default. Not used with sqlite3. 
      } 
    } 
    # Hosts/domain names that are valid for this site; required if DEBUG is False 
    # See https://docs.djangoproject.com/en/1.4/ref/settings/#allowed-hosts 
    ALLOWED_HOSTS = [] 

    CACHES = { 
    'default': { 
     'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', 
     'LOCATION': 'unique-snowflake', 
     'TIMEOUT': 86400, 
     'OPTIONS': { 
      'MAX_ENTRIES': 10000 
      }, 
     } 
    } 

# HEROKU SETTINGS 
else: 
    #EV = 'HEROKU' 
    # DEBUG = False 
    DATABASES = {} 
    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') 

    # Hosts/domain names that are valid for this site; required if DEBUG is False 
    # See https://docs.djangoproject.com/en/1.4/ref/settings/#allowed-hosts 
    # Allow all host headers 
    ALLOWED_HOSTS = ['*'] 

    # Todo: ammar - update to Memcached 
    CACHES = { 
    'default': { 
     'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', 
     'LOCATION': 'unique-snowflake', 
     'TIMEOUT': 86400, 
     'OPTIONS': {'MAX_ENTRIES': 10000}, 
     } 
    } 

TIME_ZONE = 'Europe/London' 

LANGUAGE_CODE = 'en-gb' 

SITE_ID = 1 

USE_I18N = True 

USE_L10N = True 

USE_TZ = False 

MEDIA_ROOT = '' 

MEDIA_URL = '/media/' 

STATIC_ROOT = '' 

STATIC_URL = '/static/' 


STATICFILES_DIRS =() 

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


SECRET_KEY = '***' 

TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader', 
    'django.template.loaders.app_directories.Loader', 
#  'django.template.loaders.eggs.Loader', 

) 

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    # Uncomment the next line for simple clickjacking protection: 
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware', 
) 

ROOT_URLCONF = 'sm.urls' 

# Python dotted path to the WSGI application used by Django's runserver. 
WSGI_APPLICATION = 'sm.wsgi.application' 

TEMPLATE_DIRS = (
    os.path.join(BASE_DIR, 'mytemplates') 
) 

INSTALLED_APPS = (
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.sites', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    # Uncomment the next line to enable the admin: 
    'django.contrib.admin', 
    # Uncomment the next line to enable admin documentation: 
    'django.contrib.admindocs', 
    'smcore', 
    'south', 
    'django.contrib.humanize', 
) 



LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': False, 
    'filters': { 
     'require_debug_false': { 
      '()': 'django.utils.log.RequireDebugFalse' 
     } 
    }, 
    'handlers': { 
     'mail_admins': { 
      'level': 'ERROR', 
      'filters': ['require_debug_false'], 
      'class': 'django.utils.log.AdminEmailHandler' 
     } 
    }, 
    'loggers': { 
     'django.request': { 
      'handlers': ['mail_admins'], 
      'level': 'ERROR', 
      'propagate': True, 
     }, 
    } 
} 

LOGIN_URL = '/login/' 
LOGIN_REDIRECT_URL = '/getStarted/' 
LOGOUT_URL = '/do_logout/' 

# e-mail server 
EMAIL_HOST_USER = '***@gmail.com' 
EMAIL_HOST= 'smtp.gmail.com' 
# EMAIL_PORT = 465 
EMAIL_USE_TLS = True 
EMAIL_HOST_PASSWORD = '***' 
DEFAULT_FROM_EMAIL = '***@gmail.com' 
SERVER_EMAIL = '***@gmail.com' 

업데이트

나는 설정으로 다음 업데이트와 함께 일하는 코드의 복사본을했다 및 재배치 : 다음 내 코드를 (내가 마스터와 준비가) 분기

STATIC_ROOT = 'staticfiles' 

STATIC_URL = '/static/' 

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


STATICFILES_FINDERS = (

    #'django.contrib.staticfiles.finders.FileSystemFinder', 
    #'django.contrib.staticfiles.finders.AppDirectoriesFinder', 
    #'django.contrib.staticfiles.finders.DefaultStorageFinder', 
) 

새로운 히로큐를 내 스테이징 지점에 원격으로 동기화했습니다. 나는 그 다음 git push를 스테이징 스테이징 (staging) 작업을 수행했다 : master와 full 업로드; 그것은 다시 한번 나를 같은 장소에 되찾았다. .. 도와주세요! !!

+0

두 번째 앱에서도 동일한 문제가있었습니다. 처음 삭제하고 다시 커밋 할 때 문제가 해결되었습니다. –

답변

17

는 결국이 내 URL을 파일에 아래 사용하여 해결 -이 질문에서 : Heroku - Handling static files in Django app

from <app> import settings 
urlpatterns += patterns('', 
     (r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT}), 
    ) 
+2

감사합니다. –

+0

'pattern'은 Django에서 제거되었으므로이 질문에 따라 기존 목록에 추가 경로를 추가해야합니다. https://stackoverflow.com/questions/8074955/cannot-import-name-patterns –

3

STATIC_ROOT 설정을 지정하지 않고 staticfiles 앱을 사용하고있는 것으로 보입니다. 비교

, 내 settings.py 뭔가 같다 :

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

당신은 너무 STATICFILES_DIRS을 설정해야

그리고 (이 VAR 내 conf의 아마 당신보다는 다릅니다) 코드를 누르고 다시 시도하십시오. 그것은 여전히 ​​작동하지 않으면 , 당신은 디버깅이를 사용할 수 있습니다 https://devcenter.heroku.com/articles/django-assets#debugging

+0

하지만 정확한 설정 파일은 이전 앱에서 작동합니다. 왜 차이가 있는지 이해하지 못합니다. –

+0

말할 수는 없지만 가능할 때 "나는 효과가 있지만 왜 그런지 모르겠다"보다는 명확한 것을 선호합니다 ... 이상한 행동을 취한 후에 모든 종류의 변수를 설정하여 이러한 종류의 현상을 막기로 결정했습니다. PaaS를 사용할 때 서버 측에서 수행 한 작업을 확신 할 수 없으므로 신중하게 지침을 따라야합니다. Heroku Django 가이드 예제에서는 STATIC_ROOT 및 STATICFILES_DIRS 변수가 설정됩니다. 당신은 이것을 따라야한다. –

+0

나는 표준 히로쿠 푸시 출력에서 ​​제안한 것을 시도해 보았습니다. 그러나 차이는 없습니다 : -----> 정적 파일 수집 245 개의 정적 파일이 복사되었습니다. –

1

장고 1.3부터 ​​당신 ' 다음을 할 수있게되었습니다.

# only showing relevant imports 
from django.conf import settings 
from django.conf.urls.static import static 


urlpatterns = patterns(
    '', 

    # your urls go here 
) 

if settings.DEBUG: 
    urlpatterns += static(settings.STATIC_URL, 
          document_root=settings.STATIC_ROOT) 
    urlpatterns += static(settings.MEDIA_URL, 
          document_root=settings.MEDIA_ROOT) 
6

저는 같은 문제도 다루었습니다. 데이빗이 권장하는 솔루션을 사용하지 않으려 고 했으므로 개발에만 사용되는 것으로 보입니다. (Heroku static files not loading, Django 참조)

다음은 코드에서 변경 한 2 가지입니다.

1) 나는 설정 파일

BASE_DIR = os.path.dirname(os.path.dirname(__file__)) 
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') 
STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage' 
TEMPLATE_DIRS = (
    os.path.join(BASE_DIR, 'templates'), 
    # Add to this list all the locations containing your static files 
) 

STATIC_ROOT에 다음 줄을 추가

를 settings.py를 (I 장고 1.7을 사용하고 있습니다)

:이 어디 장고를 알려줍니다에 (A) "파이썬 관리"를 실행할 때 정적 파일을 넣으십시오.피라 collectstatic "와 (b) 응용 프로그램을

TEMPLATE_DIRS을 실행할 때 정적 파일을 찾을 수 : 실행할 때 정적 파일을 검색 할 때이 정적 파일을 찾도록 장고 말한다"파이썬 manage.py의 collectstatic을 "

2) 원래

을 wsgi.py 내 파일이었다

import os 
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "xxxx.settings") 

from django.core.wsgi import get_wsgi_application 
application = get_wsgi_application() 

그리고 나는 그것을 변경 :

import os 
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "xxxx.settings") 

from django.core.wsgi import get_wsgi_application 
from whitenoise.django import DjangoWhiteNoise 
application = get_wsgi_application() 
application = DjangoWhiteNoise(application) 

는 백색 잡음에 대한 자세한 내용을 보려면 여기를 읽어 https://devcenter.heroku.com/articles/django-assets#whitenoise


또한, 백색 잡음을 설치하는 기억 실행 프로젝트를 배포하기 전에 백색 잡음 == 2.0.6

를 설치 PIP : 파이썬은 관리 할 수 ​​있습니다. py collect001

이렇게하면 모든 정적 파일을 포함하는 STATIC_ROOT (settings.py에 선언 된) 폴더가 생성됩니다.