前提
Djangoで作成したアプリケーションをHerokuにデプロイしました。
デプロイ自体は成功し、テンプレートファイル(4つあります)は正常に表示されています。
しかし、ローカルでは表示されていた管理画面だけが表示されません。
発生している問題・エラーメッセージ
https://appname.herokuapp.com/admin/にアクセスしようとすると、「Server Error (500)」というメッセージが表示され、管理画面にアクセスすることができません。
heroku logs -tでログを確認すると、以下のようになっています。
2019-10-20T10:28:09.822462+00:00 app[web.1]: 10.xxx.xxx.xxx - - [20/Oct/2019:10:28:09 +0000] "GET /admin/ HTTP/1.1" 302 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" 2019-10-20T10:28:10.187454+00:00 heroku[router]: at=info method=GET path="/admin/login/?next=/admin/" host=appname.herokuapp.com request_id=be8ca4bf-cb65-4af9-9035-0319ba1860ab fwd="110.xxx.xxx.xxx" dyno=web.1 connect=0ms service=36ms status=500 bytes=234 protocol=https 2019-10-20T10:28:10.185499+00:00 app[web.1]: 10.xxx.xxx.xxx - - [20/Oct/2019:10:28:10 +0000] "GET /admin/login/?next=/admin/ HTTP/1.1" 500 27 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36"
該当のソースコード
デプロイに関係しそうなファイルの状況はいかのとおりです。
ディレクトリ構造
project ←プロジェクト名 appname ←アプリケーション名 static staticfiles templates venv .gitignore db.sqlite3 manage.py Procfile requirements.txt runtime.txt
settings.py
python
1 2import os 3import dj_database_url 4 5# Build paths inside the project like this: os.path.join(BASE_DIR, ...) 6BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 7 8 9# Quick-start development settings - unsuitable for production 10# See https://docs.djangoproject.com/en/2.2/howto/deployment/checklist/ 11 12# SECURITY WARNING: keep the secret key used in production secret! 13 14 15# SECURITY WARNING: don't run with debug turned on in production! 16DEBUG = False 17 18ALLOWED_HOSTS = ['*'] 19 20 21# Application definition 22 23INSTALLED_APPS = [ 24 'django.contrib.admin', 25 'django.contrib.auth', 26 'django.contrib.contenttypes', 27 'django.contrib.sessions', 28 'django.contrib.messages', 29 'django.contrib.staticfiles', 30 'appname', 31] 32 33MIDDLEWARE = [ 34 'django.middleware.security.SecurityMiddleware', 35 'whitenoise.middleware.WhiteNoiseMiddleware', 36 'django.contrib.sessions.middleware.SessionMiddleware', 37 'django.middleware.common.CommonMiddleware', 38 'django.middleware.csrf.CsrfViewMiddleware', 39 'django.contrib.auth.middleware.AuthenticationMiddleware', 40 'django.contrib.messages.middleware.MessageMiddleware', 41 'django.middleware.clickjacking.XFrameOptionsMiddleware', 42] 43 44ROOT_URLCONF = 'appname.urls' 45 46TEMPLATES = [ 47 { 48 'BACKEND': 'django.template.backends.django.DjangoTemplates', 49 'DIRS': [BASE_DIR, 'templates'], 50 'APP_DIRS': True, 51 'OPTIONS': { 52 'context_processors': [ 53 'django.template.context_processors.debug', 54 'django.template.context_processors.request', 55 'django.contrib.auth.context_processors.auth', 56 'django.contrib.messages.context_processors.messages', 57 ], 58 }, 59 }, 60] 61 62WSGI_APPLICATION = 'appname.wsgi.application' 63 64 65# Database 66# https://docs.djangoproject.com/en/2.2/ref/settings/#databases 67 68DATABASES = { 69 'default': { 70 'ENGINE': 'django.db.backends.postgresql_psycopg2', 71 'NAME': 'name', 72 'USER': 'user', 73 'PASSWORD': '', 74 'HOST': 'host', 75 'PORT': '', 76 } 77} 78 79 80 81# Password validation 82# https://docs.djangoproject.com/en/2.2/ref/settings/#auth-password-validators 83 84AUTH_PASSWORD_VALIDATORS = [ 85 { 86 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 87 }, 88 { 89 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 90 }, 91 { 92 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', 93 }, 94 { 95 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', 96 }, 97] 98 99 100# Internationalization 101# https://docs.djangoproject.com/en/2.2/topics/i18n/ 102 103LANGUAGE_CODE = 'en-us' 104 105TIME_ZONE = 'UTC' 106 107USE_I18N = True 108 109USE_L10N = True 110 111USE_TZ = True 112 113 114# Static files (CSS, JavaScript, Images) 115# https://docs.djangoproject.com/en/2.2/howto/static-files/ 116 117STATIC_URL = '/static/' 118STATICFILES_DIRS =( 119 os.path.join(BASE_DIR, 'static'), 120) 121 122STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') #追加 123 124STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'#追加 125 126try: 127 from .local_settings import * 128except ImportError: 129 pass 130 131 132if not DEBUG: 133 SECRET_KEY = os.environ['SECRET_KEY'] 134 import django_heroku #追加 135 django_heroku.settings(locals()) #追加 136 137db_from_env = dj_database_url.config(conn_max_age=600, ssl_require=True) 138DATABASES['default'].update(db_from_env)
requirements.txt
dj-database-url==0.5.0 Django==2.2.5 django-heroku==0.3.1 gunicorn==19.9.0 psycopg2==2.8.3 pytz==2019.2 sqlparse==0.3.0 whitenoise==4.1.4
wsgi.py
import os from django.core.wsgi import get_wsgi_application os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'projectname.settings') application = get_wsgi_application()
試したこと・実行したコマンド
デプロイ当初は、
heroku config:set DISABLE_COLLECTSTATIC=1
と設定していたので、
heroku config:set DISABLE_COLLECTSTATIC=0
でcolliectstaticが自動実行される設定に戻しました。
また、
heroku run python manage.py migrate
heroku run python manage.py createsuperuser
はともに実行済みで、エラーなく完了しています。
staticファイル関係の設定が原因かと思い、ローカル環境にて
python manage.py collectstatic
herokuにて
heroku run python manage.py collectstatic --noinput
を実行し、特にエラー等発生せず完了しています。
デプロイに必要なファイルの作成及び修正は以下の情報に基づいて行いました。
https://qiita.com/frosty/items/66f5dff8fc723387108c
補足情報(FW/ツールのバージョンなど)
OS:Windows10 home 64bit
IDE:Visual Studio Code
Python:3.7.4
Django:2.2.5
デプロイ、マイグレーション、スーパーユーザの作成ともに成功しているため、どこに原因があるのか分かりません。staticファイル関係の設定が原因かもしれませんが、どの設定が誤っているのか見当がつきません。
何卒ご教授のほどよろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。