2014-01-15 21 views
14

私はherokuにdjangoアプリをデプロイしました。「git push heroku master」を使っても問題ありません。herokuのDjango静的ファイル

私はその後、「Herokuのは、「ステージング-r

を第二のアプリを作成して使用して、同じgitの上の第二のアプリを作成し、使用してプッシュされていない:のどれも、Gitのプッシュステージングマスターを

私は2番目のアプリを開いたとき静的ファイルをピックアップまたはロードされている(つまり、何のCSSは、JS、または画像が働く)。これは非常に混乱して

- !助けてください

私の設定ファイルは

の下ではありません
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ステージングステージングを行いました。マスターとフルアップロードを行いました。もう一度同じ場所に戻ってきました...助けて!

+0

私も2番目のアプリで同じ問題がありました。私が最初に削除して再コミットしたとき、問題は解決されました。 –

答えて

17

は結局、この私のURLで以下の使用してファイルを解く - この質問から:「ジャンゴ1.3あなたので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

'patterns'がDjangoから削除されましたので、この質問ごとに既存のリストに追加のルートを追加するだけです:https://stackoverflow.com/questions/8074955/cannot-import-name-patterns –

3

STATIC_ROOT設定をせずにstaticfilesアプリを使用しているためです。あなたは、その後、(このVARのための私のconfのは、おそらくあなたと同じではないことに注意してください)すぎ

をSTATICFILES_DIRSを設定する必要があり

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

:比較では

、私のsettings.pyのようなものですコードを押してもう一度やり直してください。 それはまだ動作しない場合は、デバッグにこれを使用することができます。 https://devcenter.heroku.com/articles/django-assets#debugging

+0

しかし、全く同じ設定ファイルが古いアプリで動作します - なぜ違いがあるのか​​分かりません。 –

+0

それは言いにくいですが、可能なときには、「動作しますがなぜわかりません」よりも明示的なものが好きです...奇妙な動作をした後、私はこの種の事態を防ぐためにすべての変数を設定することにしました。 PaaSを使用しているときは、サーバ側で何が行われているかを確認できないので、注意深くガイダンスに従ってください。 Heroku Djangoガイドの例では、STATIC_ROOTおよびSTATICFILES_DIRS変数が設定されています。あなたはこれに従ってください。 –

+0

私はあなたが提案したことを試してみましたが、標準的なherokuプッシュ出力でこれを得ました - まだ違いはありません: ----->静的ファイルの収集 245静的ファイルがコピーされました。 –

1

を次のことができました

# 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を(私はジャンゴ1.7に使用しています))settings.py

私は設定ファイルに

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を次の行を追加します。これはどこに(a)のDjangoに伝えます"python manage"を実行すると、静的ファイルを置く。PYのcollectstatic」と、(b)は、アプリケーションに

TEMPLATE_DIRSを実行したときに静的ファイルを見つける:あなたが実行したとき、それは静的ファイルを検索したとき、これはあなたの静的ファイルを探すためにはDjango告げる 『のpython 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

==ホワイトノイズをインストールし、実行します。 Pythonが管理しています。 py collectACT

これは、すべての静的ファイルを含むSTATIC_ROOT(settings.pyで宣言されています)で示されるフォルダを作成します。

関連する問題