前提・実現したいこと
DjangoにてTwittterもどきを開発している初心者です。
先日ようやく完成してherokuにデプロイを実施したところ、デプロイ自体は成功しましたが、サーバーエラー(500)が発生しました。
本番環境でもエラーメッセージが出るよう、下記記事を参考に実装したところ、以下のようなエラーメッセージが表示されました。
色々解消方法を探っておりますが、どうしてもエラーが解消されない状態です……。
参考サイト
https://qiita.com/yuu-eguci/items/a1e4b0a2f238d5ccc985
<2021/8/14追記〉
・表題を変更しました。
【旧題】⇒【Django】herokuでデプロイした結果、staticfilesが原因のサーバーエラー(500)が発生する
発生している問題・エラーメッセージ
Error
1ValueError at /accounts/login/ 2Missing staticfiles manifest entry for 'favicon.ico'
tree
1PENTO_ARTS (1) 2├── accounts (2) 3│ ├── __pycache__ 4│ ├── migrations 5│ │ ├── __pycache__ 6│ │ └── __init__.py 7│ └── templates 8│ └── account 9│ └── login.html 10├── pento_app (3) 11│ ├── static 12│ │ └── favicon.ico 13│ └── templates 14│ └── base.html 15├── pento_arts 16│ ├── settings.py 17│ └── urls.py 18│ 19└── staticfiles 20 ├── admin 21 │ ├── css 22 │ ├── fonts 23 │ ├── img 24 │ │ └── gis 25 │ └── js 26 │ ├── admin 27 │ └── vendor 28 └── favicon.ico 29
(1)PENTO_ARTS = プロジェクト名
(2)accounts = アプリ名
(3)pento_app = アプリ名
試したこと
・『python manage.py collectstatic』コマンドでプロジェクトフォルダ直下の「staticfiles」に静的ファイルを集約(favicon.icoも含む)。
・settings.pyファイルのstaticfilesの設定を以下のように修正。
・urls.pyファイルにもstaticfilesの設定を以下のように追加。
・
・上記作業を行ったうえで、もう一度デプロイを行ってもエラーは変わらずでした。
・settings.pyの設定が誤っているのでしょうか……。どなたかご教示頂けますと幸いです。
〈2021/8/11追記〉
・favicon.icoの記述箇所『base.html』のコードを追記しました。
〈2021/8/14追記〉
・ディレクトリ構造を追加
・settings.pyを修正の上、全文を記載(セキュリティ上、一部は除く)
・login.htmlを追加
・whitenoiseはインストール済みです。 ⇒ whitenoise=5.2.0
※質問は初めてのため、情報がかなり不足しているかもしれません。必要に応じて追記させて頂きます。
該当のソースコード
settings
1 2import os 3import django_heroku 4from pathlib import Path 5import environ 6 7<省略> 8 9# プロジェクトのベースフォルダを示す 10BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 11REPOSITORY_ROOT = os.path.dirname(BASE_DIR) 12 13#サーバが受理するサーバアドレスを指定する。この値を正確に記述することは「Hostヘッダインジェクション攻撃」に対して有効 14ALLOWED_HOSTS = ["*"] 15 16INSTALLED_APPS = [ 17 'pento_app.apps.PentoAppConfig', 18 'accounts.apps.AccountsConfig', 19 'django.contrib.admin', 20 'django.contrib.auth', 21 'django.contrib.contenttypes', 22 'django.contrib.sessions', 23 'django.contrib.messages', 24 'django.contrib.staticfiles', 25 'django.contrib.sites', 26 'allauth', 27 'allauth.account', 28 'allauth.socialaccount', 29 'bootstrap4', 30 'imagekit', 31] 32 33MIDDLEWARE = [ 34 'django.middleware.security.SecurityMiddleware', 35 'django.contrib.sessions.middleware.SessionMiddleware', 36 'django.middleware.common.CommonMiddleware', 37 'django.middleware.csrf.CsrfViewMiddleware', 38 'django.contrib.auth.middleware.AuthenticationMiddleware', 39 'django.contrib.messages.middleware.MessageMiddleware', 40 'django.middleware.clickjacking.XFrameOptionsMiddleware', 41 'whitenoise.middleware.WhiteNoiseMiddleware', 42] 43 44<省略> 45 46STATIC_URL = '/static/' 47 48STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') 49STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage' 50 51django_heroku.settings(locals()) 52
urls
1 2from django.contrib.staticfiles.urls import staticfiles_urlpatterns 3 4urlpatterns = [ 5 6<省略> 7 8] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) 9 10urlpatterns += staticfiles_urlpatterns() 11urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 12 13 14from pento_app.views import my_customized_server_error 15handler500 = my_customized_server_error 16
base
1 2{% load static %} 3{% load bootstrap4 %} 4 5<!DOCTYPE html> 6<html lang="ja"> 7 8<head> 9 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous"> 10 <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css"> 11 <link rel="shortcut icon" href="{% static 'favicon.ico' %}"> 12 <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script> 13 <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script> 14 <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script> 15 16 <link rel="stylesheet" type="text/css" href="{% static 'header.css' %}"> 17 <link rel="stylesheet" type="text/css" href="{% static 'footer.css' %}"> 18 <meta charset="UTF-8"> 19 <meta name="viewport" content="width=device-width,initial-scale=1"> 20 21 {% block Title %}<title>PENTO-ARTS</title>{% endblock Title %} 22 23 <link href="https://cdnjs.cloudflare.com/ajax/libs/lightbox2/2.7.1/css/lightbox.css" rel="stylesheet"> 24 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 25 <script src="https://cdnjs.cloudflare.com/ajax/libs/lightbox2/2.7.1/js/lightbox.min.js" type="text/javascript"></script> 26 27</head> 28 29<body> 30 31 <!-- Header Start --> 32 <header class="site-header"> 33 <div class="wrapper site-header__wrapper"> 34 <h2 class="brand">PENTO-ARTS</h2> 35 </div> 36 </header> 37 <!-- Header End --> 38 39{% block content %} 40{% endblock content %} 41 42<footer id="footer01" class="footer outer-block"> 43 44 <p class="copyright"> 45 <省略> 46 </p> 47</footer> 48 49</body> 50<script> 51 $.ajaxSetup({ 52 beforeSend: function (xhr, settings) { 53 function getCookie(name) { 54 var cookieValue = null; 55 if (document.cookie && document.cookie != '') { 56 var cookies = document.cookie.split(';'); 57 for (var i = 0; i < cookies.length; i++) { 58 var cookie = jQuery.trim(cookies[i]); 59 if (cookie.substring(0, name.length + 1) == (name + '=')) { 60 cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); 61 break; 62 } 63 } 64 } 65 return cookieValue; 66 } 67 if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) { 68 xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')); 69 } 70 } 71 }); 72 $(document).on("click", ".post-like", function () { 73 var id = $(this).data('id'); 74 $.ajax({ 75 type: "post", 76 url: '{% url "pento_app:like" %}', 77 data: { 78 id: id, 79 csrfmiddlewaretoken: $("#csrfmiddlewaretoken").val() 80 }, 81 success: function (data) { 82 $("#post-like-" + id).removeClass("post-like text-info").addClass("post-liked disabled text-secondary"); 83 var like_count = data["like_count"] 84 $("#like-count-" + id).html(like_count); 85 alert(data["message"]) 86 } 87 }); 88 }); 89</script> 90 91</html> 92
login
1{% extends 'base.html' %} 2{% load static %} 3{% load bootstrap4 %} 4{% block Title %}<title>PENTO-ARTS | ログイン</title>{% endblock Title %} 5 6{% block content %} 7 8<link rel="stylesheet" href="{% static 'style.css' %}"> 9 10<div class="form-content"> 11 <h1 class="mb-4">ログイン</h1> 12 13 {% if messages %} 14 <ul> 15 {% for message in messages %} 16 <li class="message_fontcolor">{{ message }}</li> 17 {% endfor %} 18 </ul> 19 {% endif %} 20 21 <form method="post" action="{% url 'account_login' %}"> 22 {% csrf_token %} 23 {% bootstrap_form form %} 24 <button class="btn btn-info btn-block" type="submit">ログイン</button> 25 <p class="mt-3"><a href="{% url 'account_signup' %}" class="text-info">新規登録はこちら</a></p> 26 <!--※パスワードリセット機能は一旦保留 27 <p class="mt-3"><a href="{% url 'account_reset_password' %}" class="text-info">パスワードをお忘れですか?</a></p> 28 --> 29 </form> 30</div> 31{% endblock content %} 32
補足情報(FW/ツールのバージョンなど)
・Python 【version = 3.9.2】
・Django 【version = 3.1.7】
・windows10
回答1件
あなたの回答
tips
プレビュー