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

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

ただいまの
回答率

87.49%

DjangoでAWSのS3の設定をすると動画投稿サイトがInternal Server Errorになる

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,115

score 18

数日前にこちらで質問した者です。以前の質問はこちらですDjangoで画像をS3にアップしたいのですがエラーが出てしまいます

前回のエラーは「502 Bad Gateway nginx/1.14.0 (Ubuntu)」というエラーが出ていました。
今回はもう一度デプロイをやり直しました。

恐らくエラーが変わった理由は以下。

■ 前回、実行したコマンド→ pip install django-storages
→ pip install boto3 

■ 今回、実行したコマンド→ pip3 install django-storages
→ pip3 install boto3  

pipに3を付けてコマンドを叩いたところ、エラー表示が「502 Bad Gateway」から、「Internal Server Error」に変わったのです。

■ S3のバケットにも「python3 manage.py collectstatic」コマンドの後、無事にstaticフォルダが作成されました。

■ EC2のインスタンスの権限はIAMロールのAmazonS3FullAccess権限を割り当てました。

■ 主に参考にしたサイトは以下ですが、この通りにやっても上手くいかずに困りましたので自分なりに調べながらやっています。

静的ファイル、メディアファイルをAmazon S3で管理 - Narito Blog

■ 気になる所として、マイグレーションをしようとすると

raise ImproperlyConfigured("Could not load Boto's S3 bindings.\n"
django.core.exceptions.ImproperlyConfigured: Could not load Boto's S3 bindings.


以上のエラー表示が出ます。

これが問題の解決の糸口の可能性がありますでしょうか?
ぜひご教示お願い致します。

settings.pyの設定は以下です。

STATIC_URL = '/static/'

STATIC_ROOT = os.path.join(BASE_DIR, "static/")
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]

# メディアファイル関連
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')

LOGIN_URL = 'login'

# 共通の設定
AWS_ACCESS_KEY_ID = 'AK×××××××××××××××××××××'
AWS_SECRET_ACCESS_KEY = '×××××××××××××××××××××'
AWS_STORAGE_BUCKET_NAME = 'motuni'
AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME
AWS_S3_OBJECT_PARAMETERS = {
'CacheControl': 'max-age=86400', # 1日はそのキャッシュを使う
}


# 静的ファイルの設定
AWS_LOCATION = 'static'
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
STATIC_URL = "https://%s/%s/" % (AWS_S3_CUSTOM_DOMAIN, AWS_LOCATION)


# メディアファイルの設定
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'

恐らくNginxの設定が間違っていると思いますが、どこが間違いなのかわかりません。

server {
    listen 80;
    server_name motuni.xyz;

    location = /favicon.ico {access_log off; log_not_found off;}
    location /static/ {
        root /home/ubuntu/project4;
    }
    location /media/ {
        root /home/ubuntu/project4;
    }
    location /static/admin {
        root /home/ubuntu/py36/lib/python3.6/site-packages/django/contrib/admin;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/home/ubuntu/project4/project4.sock;
    }
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

check解決した方法

0

解決した。原因はurls.pyだった。

from storages.backends.s3boto import S3BotoStorage  ←これを削除


urlpatterns = [
    path('admin/', admin.site.urls),
    path('videos/', include('videos.urls')),
    path('accounts/', include('accounts.urls')),
    path('accounts/', include('django.contrib.auth.urls')),
    path('',  RedirectView.as_view(url='/videos/')),
    ]+ static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
StaticRootS3BotoStorage = lambda: S3BotoStorage(location='static') ←これを削除
MediaRootS3BotoStorage  = lambda: S3BotoStorage(location='media') ←これを削除

「←これを削除」の部分を削除したら、無事にサイトが表示され、mediaファイルもS3に保存されるようになりました。urls.pyに不要な記述をしてしまっていたわけです。どこかのサイトに書かれていたため、書いて置いた方が良いと思い、記入してしまいました。

数日間、S3のことで頭がいっぱいで、挫折しそうになりましたが、あきらめなくて本当に良かったと思います。解答していただいた方にも感謝しております。ありがとうございました!

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

こちらはご覧になりましたか?

https://stackoverflow.com/questions/13374247/django-storages-could-not-load-amazons-s3-bindings-errors

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/10/29 09:24

    HTMLフェイルを<p>ハロー</p>だけにしました。
    しかし同じくinternal server errorでした。
    sudo systemctl restart nginxとEC2インスタンスの再起動も行いました。
    どうやらリンク先エラーではなさそうです。

    キャンセル

  • 2019/10/29 12:38

    解決しました!いろいろすいませんでした。ありがとうございました!

    キャンセル

  • 2019/10/29 13:25

    よかったですね!

    キャンセル

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

  • ただいまの回答率 87.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る