質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

2回答

1731閲覧

djangoでawsの設定をするとServer Error (500)となる

grimro92

総合スコア15

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

1グッド

1クリップ

投稿2020/03/14 16:16

編集2020/03/15 11:04

前提・実現したいこと

django+heroku+awsでECサイトを製作しています。herokuへのデプロイ完了後、画像が表示されないのでaws設定をここのサイトを見て追記しました。しかし、Server Error (500)となりなにも表示されません。
awsの設定記述前は画像以外は表示されていたため、そこに問題があると思い調べたのですが分かりませんでした。どなたかどこが間違っているか教えてください。
ローカル環境では画像含めすべて表示されます。また、https://私のサイト.herokuapp.com/admin/には入り、編集することができます。

発生している問題・エラーメッセージ

heroku logsを見る限り、これ以外のエラーメッセージはありませんでした。

2020-03-14T15:53:02.831680+00:00 heroku[router]: at=info method=GET path="/" host=aiecsite.herokuapp.com request_id=8bb35d57-85aa-41a8-a949-4739ba93053b fwd="123.227.40.180" dyno=web.1 connect=0ms service=913ms status=500 bytes=234 protocol=https 2020-03-14T15:53:02.829594+00:00 app[web.1]: 10.41.198.134 - - [15/Mar/2020:00:53:02 +0900] "GET / HTTP/1.1" 500 27 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36" 2020-03-14T15:56:20.111383+00:00 heroku[router]: at=info method=GET path="/" host=aiecsite.herokuapp.com request_id=9c88be55-4b5c-4c6d-a193-ef0ac5498e9c fwd="123.227.40.180" dyno=web.1 connect=0ms service=35ms status=500 bytes=234 protocol=https 2020-03-14T15:56:20.110689+00:00 app[web.1]: 10.16.250.243 - - [15/Mar/2020:00:56:20 +0900] "GET / HTTP/1.1" 500 27 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36" 2020-03-14T16:02:34.009582+00:00 app[web.1]: 10.156.16.229 - - [15/Mar/2020:01:02:34 +0900] "GET /admin/ HTTP/1.1" 200 5981 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36" 2020-03-14T16:02:34.011347+00:00 heroku[router]: at=info method=GET path="/admin/" host=aiecsite.herokuapp.com request_id=569721dd-4b8c-4f3e-bd58-df28132a9e36 fwd="123.227.40.180" dyno=web.1 connect=1ms service=387ms status=200 bytes=6433 protocol=https 2020-03-14T16:02:39.089861+00:00 app[web.1]: 10.156.16.229 - - [15/Mar/2020:01:02:39 +0900] "GET /admin/app/sale/ HTTP/1.1" 200 3377 "https://aiecsite.herokuapp.com/admin/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3 987.132 Safari/537.36"

settings.py

import os import dj_database_url BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) DEBUG = False ALLOWED_HOSTS = ['*'] INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'users', 'django.contrib.humanize', 'app', 'storages', ####追記 ] AUTH_USER_MODEL = 'users.User' NUMBER_GROUPING = 3 MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'whitenoise.middleware.WhiteNoiseMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] ROOT_URLCONF = 'ecsite.urls' TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ] WSGI_APPLICATION = 'ecsite.wsgi.application' DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'name', 'USER': 'user', 'PASSWORD': '', 'HOST': 'host', 'PORT': '', } } AUTH_PASSWORD_VALIDATORS = [ { 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', }, { 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', }, { 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', }, { 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', }, ] LANGUAGE_CODE = 'ja' TIME_ZONE = 'Asia/Tokyo' USE_I18N = True USE_L10N = True USE_TZ = True PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__)) LOGIN_URL = 'app:login' LOGIN_REDIRECT_URL = 'app:index' LOGOUT_REDIRECT_URL = 'app:index' MEDIA_ROOT = os.path.join(BASE_DIR, 'media') MEDIA_URL = '/media/' STATIC_URL = '/static/' STATICFILES_DIRS = (os.path.join(BASE_DIR, "static"),) STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static') SESSION_SAVE_EVERY_REQUEST = True try: from .local_settings import * except ImportError: pass if not DEBUG: ##################################追記した部分################################################ SECRET_KEY = os.environ['SECRET_KEY'] AWS_ACCESS_KEY_ID = os.environ['AWS_ACCESS_KEY_ID'] AWS_SECRET_ACCESS_KEY = os.environ['AWS_SECRET_ACCESS_KEY'] AWS_STORAGE_BUCKET_NAME = os.environ['AWS_STORAGE_BUCKET_NAME'] DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage' S3_URL = 'http://%s.s3.amazonaws.com/' % AWS_STORAGE_BUCKET_NAME MEDIA_URL = S3_URL AWS_S3_FILE_OVERWRITE = False AWS_DEFAULT_ACL = None ##################################ここまで################################################ import django_heroku django_heroku.settings(locals()) db_from_env = dj_database_url.config(conn_max_age=600, ssl_require=True) DATABASES['default'].update(db_from_env)

backends.py(2020/03/15追記)

from storages.backends.s3boto3 import S3Boto3Storage class MediaStorage(S3Boto3Storage): location = 'media' file_overwrite = False

補足情報(FW/ツールのバージョンなど)

python 3.8.0
appdirs==1.4.3
boto3==1.12.21
botocore==1.15.21
certifi==2019.11.28
chardet==3.0.4
distlib==0.3.0
dj-database-url==0.5.0
Django==2.2
django-heroku==0.3.1
django-storages==1.9.1
docutils==0.15.2
filelock==3.0.12
gunicorn==20.0.4
idna==2.9
jmespath==0.9.5
Pillow==7.0.0
psycopg2==2.8.4
python-dateutil==2.8.1
pytz==2019.3
requests==2.23.0
s3transfer==0.3.3
six==1.14.0
sqlparse==0.3.1
urllib3==1.25.8
virtualenv==20.0.10
whitenoise==4.1.3

s.k👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

settings.pyのS3_URLを次の様にしたらどうでしょうか?

python

1S3_URL = "https://%s/%s/" % (AWS_S3_CUSTOM_DOMAIN, AWS_LOCATION)

投稿2020/03/14 23:22

ak_suzuki

総合スコア194

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

grimro92

2020/03/15 11:02

回答ありがとうございます。ak_suzuki様の通りにしたところ、AWS_S3_CUSTOM_DOMAINとAWS_LOCATIONの変数が無いとエラーが出たので、2通り変更を試しました。 ① try: from .local_settings import * except ImportError: pass if not DEBUG: SECRET_KEY = os.environ['SECRET_KEY'] AWS_ACCESS_KEY_ID = os.environ['AWS_ACCESS_KEY_ID'] AWS_SECRET_ACCESS_KEY = os.environ['AWS_SECRET_ACCESS_KEY'] AWS_STORAGE_BUCKET_NAME = os.environ['AWS_STORAGE_BUCKET_NAME'] AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME AWS_LOCATION = 'static' DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage' S3_URL = "https://%s/%s/" % (AWS_S3_CUSTOM_DOMAIN, AWS_LOCATION) MEDIA_URL = S3_URL AWS_S3_FILE_OVERWRITE = False AWS_DEFAULT_ACL = None import django_heroku django_heroku.settings(locals()) db_from_env = dj_database_url.config(conn_max_age=600, ssl_require=True) DATABASES['default'].update(db_from_env) と書き直しましたが、Server Error (500)のままでした。 ② https://blog.daisukekonishi.com/post/django-drf-storages/ https://narito.ninja/blog/detail/27/ 上記のサイトを参考に、修正しました。 try: from .local_settings import * except ImportError: pass if not DEBUG: SECRET_KEY = os.environ['SECRET_KEY'] AWS_ACCESS_KEY_ID = os.environ['AWS_ACCESS_KEY_ID'] AWS_SECRET_ACCESS_KEY = os.environ['AWS_SECRET_ACCESS_KEY'] AWS_STORAGE_BUCKET_NAME = os.environ['AWS_STORAGE_BUCKET_NAME'] AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME AWS_DEFAULT_ACL = os.environ.get('AWS_DEFAULT_ACL', 'public-read') AWS_LOCATION = 'static' AWS_S3_OBJECT_PARAMETERS = {'CacheControl': 'max-age=86400',} AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME STATIC_URL = 'https://%s/%s/' % (AWS_S3_CUSTOM_DOMAIN, AWS_LOCATION) STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage' DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage' import django_heroku django_heroku.settings(locals()) db_from_env = dj_database_url.config(conn_max_age=600, ssl_require=True) DATABASES['default'].update(db_from_env) とし、settings.pyと同じ階層にbackends.py(内容は質問に追記しています。)を作成し、python manage.py collectstaticと実行し、デプロイ→heroku openしたところ、画像以外は表示され動作も問題ないです。画像のURLはhttps://aiecsite.s3.amazonaws.com/static/product/smartphone_hogo_film_3H9lnla.png とaws s3のURLになっています。
grimro92

2020/03/15 11:32

上記の②の状態で、https://私のサイト.herokuapp.com/adminから画像を登録したところ、無事表示されました。本当にありがとうございました。
guest

0

ak_suzuki様のサポートのおかげでdjango+heroku+awsを使用し、無事サイト・画像が表示できました。今後のために最終的な設定、参考サイトをまとめておきます。参考にしてください。

###settings.py

******上は同じため省略********** try: from .local_settings import * except ImportError: pass if not DEBUG: SECRET_KEY = os.environ['SECRET_KEY'] AWS_ACCESS_KEY_ID = os.environ['AWS_ACCESS_KEY_ID'] AWS_SECRET_ACCESS_KEY = os.environ['AWS_SECRET_ACCESS_KEY'] AWS_STORAGE_BUCKET_NAME = os.environ['AWS_STORAGE_BUCKET_NAME'] AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME AWS_S3_OBJECT_PARAMETERS = {'CacheControl': 'max-age=86400',} AWS_DEFAULT_ACL = os.environ.get('AWS_DEFAULT_ACL', 'public-read') AWS_LOCATION = 'static' STATIC_URL = 'https://%s/%s/' % (AWS_S3_CUSTOM_DOMAIN, AWS_LOCATION) STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage' DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage' import django_heroku django_heroku.settings(locals()) db_from_env = dj_database_url.config(conn_max_age=600, ssl_require=True) DATABASES['default'].update(db_from_env)

###backends.py(settings.pyと同じ階層に作成)

from storages.backends.s3boto3 import S3Boto3Storage class MediaStorage(S3Boto3Storage): location = 'media' file_overwrite = False

ターミナルで、
python manage.py collectstatic
git add -A .
git commit -m "comment"
git push heroku master
heroku open
と実行。

https://サイト名.herokuapp.com/admin
に行き、画像を登録。

参考サイト様
静的ファイル、メディアファイルをAmazon S3で管理
PengNote
Djangoで画像をS3にアップしたいのですがエラーが出てしまいます
DjangoでAWSのS3の設定をすると動画投稿サイトがInternal Server Errorになる

投稿2020/03/15 11:54

grimro92

総合スコア15

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問