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

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

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

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

AWS(Amazon Web Services)

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

Q&A

解決済

1回答

408閲覧

AWSのLightsailにデプロイしたDjangoのアプリケーションのページのServerError500を解消したい 【お助けください!】

Hikaru-UPP

総合スコア6

Django

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

AWS(Amazon Web Services)

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

0グッド

0クリップ

投稿2024/09/13 02:41

編集2024/09/17 08:30

実現したいこと

Djangoのアプリケーションの一部のページでServerError500の解消を実現したい。

発生している問題・分からないこと

以前、AWSのLightsailにデプロイしたDjangoのアプリケーションがあり、下記の内容を行う前は、エラーも出ることなく、正常に利用することができました。

・VSCode上(ローカル環境)で、Djangoのディレクトリ(「students」)のmodels.pyの不要なデータベース項目を削除し、マイグレーションを行いました。

エラーメッセージ

ロギング設定を行い、エラーログを確認したところ、下記の内容が出てきました。

error

1result = block.nodelist.render(context) 2^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 3File "/opt/bitnami/python/lib/python3.11/site-packages/django/template/base.py", line 10 405, in render 5return SafeString("".join([node.render_annotated(context) for node in self])) 6^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 7File "/opt/bitnami/python/lib/python3.11/site-packages/django/template/base.py", line 10 805, in <listcomp> 9return SafeString("".join([node.render_annotated(context) for node in self])) 10^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 11File "/opt/bitnami/python/lib/python3.11/site-packages/django/template/base.py", line 96 126, in render_annotated 13return self.render(context) 14^^^^^^^^^^^^^^^^^^^^ 15File "/opt/bitnami/python/lib/python3.11/site-packages/django/template/base.py", line 10 1664, in render 17output = self.filter_expression.resolve(context) 18^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 19File "/opt/bitnami/python/lib/python3.11/site-packages/django/template/base.py", line 71 205, in resolve 21obj = self.var.resolve(context) 22^^^^^^^^^^^^^^^^^^^^^^^^^ 23File "/opt/bitnami/python/lib/python3.11/site-packages/django/template/base.py", line 84 247, in resolve 25value = self._resolve_lookup(context) 26^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 27File "/opt/bitnami/python/lib/python3.11/site-packages/django/template/base.py", line 89 280, in _resolve_lookup 29current = getattr(current, bit) 30^^^^^^^^^^^^^^^^^^^^^ 31File "/opt/bitnami/python/lib/python3.11/site-packages/django/db/models/fields/files.py" 32, line 65, in url 33self._require_file() 34File "/opt/bitnami/python/lib/python3.11/site-packages/django/db/models/fields/files.py" 35, line 40, in _require_file 36raise ValueError( 37ValueError: The 'img' attribute has no file associated with it.

該当のソースコード

students/models.py

1from django.db import models 2from django.urls import reverse 3from jp_birthday.models import BirthdayModel 4from datetime import datetime 5from accounts.models import Subject,CustomUser 6 7class Student(models.Model): 8 Choices_status = ( 9 ('coming', '通塾生'), 10 ('quitting', '退塾生'), 11 ('graduating', '卒業生'), 12 ) 13 14 name = models.CharField(max_length=200) 15 birthday = models.DateField() 16 school = models.ForeignKey(School, on_delete=models.CASCADE) 17 years = models.IntegerField() 18 entrance = models.DateField() 19 brother = models.CharField(max_length=10) 20 img = models.ImageField(blank=True) 21 explanation = models.TextField(blank=True, null=True) 22 mail = models.CharField(max_length=200, null=True, blank=True) 23 status = models.CharField(max_length=10,choices=Choices_status,default='coming') 24 25 def __str__(self): 26 return self.name 27 28 def get_absolute_url(self): 29 return reverse('list') 30 31 @property 32 def age(self): 33 # 現在の日付を取得 34 current_date = datetime.now() 35 # 生年月日と現在の日付の差を計算 36 age = current_date.year - self.birthday.year - ((current_date.month, current_date.day) < (self.birthday.month, self.birthday.day)) 37 return age 38 class Meta: 39 ordering = ['name'] 40

students/views.py

1from django.views.generic import TemplateView, ListView, DetailView 2from .models import Student,School,StudentSubject 3from django.urls import reverse_lazy 4from django.contrib.auth.mixins import LoginRequiredMixin 5from collections import defaultdict 6from django.db.models import Q 7from django.shortcuts import get_object_or_404 8from accounts.models import Subject, CustomUser 9from django.shortcuts import render, redirect 10from .forms import StudentForm 11 12class StudentDetailView(LoginRequiredMixin,DetailView): 13 model = Student 14 template_name = "students/student_detail.html" 15
【settings.py】 from pathlib import Path from environs import Env from pathlib import Path # Environment Variables env = Env() env.read_env() BASE_DIR = Path(__file__).resolve().parent.parent SECRET_KEY = env.str('SECRET_KEY') DEBUG = env.bool('DEBUG') ALLOWED_HOSTS = ['〇〇', '127.0.0.1'] INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'students', 'django_bootstrap5', 'import_export', 'accounts.apps.AccountsConfig', 'lessons', 'exams', ] MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', '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 = 'student_info.urls' TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [BASE_DIR/'templates'], '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 = 'student_info.wsgi.application' if env.bool('LOCAL'): DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', } } else: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': env.str('DB_NAME'), 'USER': env.str('DB_USER'), 'HOST': env.str('DB_HOST'), 'PASSWORD': env.str('DB_PASSWORD'), 'PORT': env.int('DB_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_TZ = True STATIC_URL = 'static/' STATIC_ROOT = BASE_DIR / 'static' DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' MEDIA_URL = '/media/' MEDIA_ROOT = BASE_DIR / 'media_local' AUTH_USER_MODEL = 'accounts.CustomUser' LOGIN_URL = 'login' LOGIN_REDIRECT_URL = 'list' LOGOUT_REDIRECT_URL = 'logout' CSRF_COOKIE_SECURE = True SESSION_COOKIE_SECURE = True import os import datetime today = datetime.date.today().strftime('%Y%m%d') LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'formatters': { 'development': { 'format': '%(asctime)s [%(levelname)s] %(message)s' }, }, 'handlers': { 'console': { 'level': 'DEBUG', 'class': 'logging.StreamHandler', 'formatter': 'development', }, 'file': { 'level': 'DEBUG', 'class': 'logging.FileHandler', 'filename': os.path.join(BASE_DIR, f'logs/log_{today}.log'), 'formatter': 'development', }, }, 'loggers': { 'django': { 'handlers': ['file', 'console'], 'level': 'DEBUG', 'propagate': True, } },

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

現在、当スレッドで、アドバイスをいただきつつ、まず、ロギングのエラー解消に動いていましたがようやくロギングのエラーが解消できました。現在、本題のエラーの原因追及を行おうと思っています。

補足

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

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

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

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

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

AbeTakashi

2024/09/13 04:11

レスポンスコード500のエラーの原因は多岐にわたるので、ソースコードだけ見せられても第三者が回答するのは厳しいかと思います。/opt/bitnami/apache/logs/error_log には何か情報がでてないのでしょうか? でてるのであれば、その情報は質問文内に追記された方が良いです。エラーログの出力や確認が上手くいかないということであれば、そちらにフォーカスを当てて質問された方がいいかもしれません。
Hikaru-UPP

2024/09/13 05:57

コメントおよびご指摘ありがとうございます。今後、出来る限り、回答者・閲覧者の方が回答しやすい情報出しを心掛けたいと思います。 また、今回の「/opt/bitnami/apache/logs/error_log」には、ServerError500に関連しそうなエラーコードは見つかりませんでした。そのため、ロギング設定を行い、デプロイ後、エラーログファイルよりエラーを確認しようとした際、上記の「試したこと・調べたこと」に記載した表示が出てしまい、一旦ロギング設定を削除した状況でございます。 お力添えいただけますと幸いです。
AbeTakashi

2024/09/13 06:06

500エラーですが、Apacheが出す場合と、フレームワーク(今回で言えばDjango)が出す場合の2パターンあります。Apacheに該当のログがないのであれば、フレームワーク側のログに出ている可能性が高いです。フレームワークのログ出力の設定も確認し、実際にログが出てないかもご確認いただくと良いかと思います。500エラーを出してログを一切出さないみたいな設定になってることは、意図してそうしてる場合を除いて、そう多くはありません。 参考) https://blog.future.ad.jp/django_logfile
mike2mike4

2024/09/13 09:33

思いつきで申し訳ありませんが、 >・VSCode上(ローカル環境)で、Djangoのディレクトリ(「students」)のmodels.pyの不要なデータベース項目を削除し、マイグレーションを行いました。 とのことなので、DBの接続に一部失敗しているのではないでしょうか? 必要なものまで削除してしまったのでは?
Hikaru-UPP

2024/09/13 09:40

ありがとうございます! 教えていただいたloggingについて、settings.pyに入力しつつ、ルートディレクトリ直下にlogsのディレクトリを作成しましたが、サイト自体が「Internal Server Error」となり、エラー表示となりました。 そこで、 Apache のエラーログの確認(sudo cat /opt/bitnami/apache2/logs/error_log )を行ったところ、下記のようなエラーログが出ました。 Fri Sep 13 18:30:02.752037 2024] [wsgi:error] [pid 2972:tid 140178937931456] [remote 116. 91.76.187:53042] configure_logging(settings.LOGGING_CONFIG, settings.LOGGING) [Fri Sep 13 18:30:02.752044 2024] [wsgi:error] [pid 2972:tid 140178937931456] [remote 116. 91.76.187:53042] File "/opt/bitnami/python/lib/python3.11/site-packages/django/utils/log .py", line 76, in configure_logging [Fri Sep 13 18:30:02.752048 2024] [wsgi:error] [pid 2972:tid 140178937931456] [remote 116. 91.76.187:53042] logging_config_func(logging_settings) [Fri Sep 13 18:30:02.752054 2024] [wsgi:error] [pid 2972:tid 140178937931456] [remote 116. 91.76.187:53042] File "/opt/bitnami/python/lib/python3.11/logging/config.py", line 823, in dictConfig [Fri Sep 13 18:30:02.752062 2024] [wsgi:error] [pid 2972:tid 140178937931456] [remote 116. 91.76.187:53042] dictConfigClass(config).configure() [Fri Sep 13 18:30:02.752070 2024] [wsgi:error] [pid 2972:tid 140178937931456] [remote 116. 91.76.187:53042] File "/opt/bitnami/python/lib/python3.11/logging/config.py", line 580, in configure [Fri Sep 13 18:30:02.752073 2024] [wsgi:error] [pid 2972:tid 140178937931456] [remote 116. 91.76.187:53042] raise ValueError('Unable to configure handler ' [Fri Sep 13 18:30:02.752083 2024] [wsgi:error] [pid 2972:tid 140178937931456] [remote 116. 91.76.187:53042] ValueError: Unable to configure handler 'file' ロギングの設定に問題があることは確認できました。 そのため、ログファイルのパーミッションを確認しましたが、こちらも問題ありませんでした。 その後、アパッチとDjangoアプリケーションをリスタートさせましたが、エラーは解決しておりません。
Hikaru-UPP

2024/09/13 10:11

>mike2mike4 コメントありがとうございます。 再度、VScodeおよびGitHubでエラー表示になった前後を確認しましたが、特に、必要なものを削除したようなものはなかったように思います。
AbeTakashi

2024/09/13 14:02

たしかにロギング周りのエラーっぽいですね。「ログファイルのパーミッションを確認しましたが、こちらも問題ありませんでした。」となってますが、第三者的にはそれが本当に問題ないかどうかは、質問文にある情報だけでは判断がつきません。一部をマスクするなどして可能な範囲で良いので、settings.pyの内容と、該当のログ出力先ディレクトリのパーミッション情報を質問文に追記されると、具体的なアドバイスがでてくるかもしれません。
Hikaru-UPP

2024/09/16 08:41 編集

ありがとうございます。 質問文に、「settings.py」と「ログ出力先のパーミッション情報」を記載しました。もしよろしければ、ご確認いただいて、ご教示いただけますと幸いです。
AbeTakashi

2024/09/16 17:38

nginxかApacheか、それともbuild in serverが動いているのかが質問文からは分かりませんが、ログディレクトリのユーザーやグループがbitnamiとなってますので、httpサーバが違うユーザで動いていたらファイルが作成出来ないと思います。まずはhttpサーバがbitnamiユーザで動いてるかを確認するか、もしくはログディレクトリのユーザ名をhttpサーバの実行ユーザと合わせる、またはパーミッションを777にしてみるとか試してみたらいかがでしょうか?
Hikaru-UPP

2024/09/17 02:52 編集

コメントありがとうございます。 順番に確認していきました。 「httpサーバがbitnamiユーザで動いてるかを確認する」 →下記のような結果でした。 root 2968 0.0 1.4 21680 13820 ? Ss Sep13 0:15 /opt/bitnami/apache/bin /httpd -f /opt/bitnami/apache/conf/httpd.conf daemon 28688 0.0 6.9 401836 66812 ? Sl Sep16 0:05 /opt/bitnami/apache/bin /httpd -f /opt/bitnami/apache/conf/httpd.conf daemon 28689 0.0 4.5 385436 43580 ? Sl Sep16 0:05 /opt/bitnami/apache/bin /httpd -f /opt/bitnami/apache/conf/httpd.conf daemon 28690 0.0 3.0 2077680 29596 ? Sl Sep16 0:00 /opt/bitnami/apache/bin /httpd -f /opt/bitnami/apache/conf/httpd.conf daemon 28691 0.0 2.5 2078212 24620 ? Sl Sep16 0:00 /opt/bitnami/apache/bin /httpd -f /opt/bitnami/apache/conf/httpd.conf daemon 29544 0.0 3.0 2077708 29624 ? Sl Sep16 0:00 /opt/bitnami/apache/bin /httpd -f /opt/bitnami/apache/conf/httpd.conf bitnami 38268 0.0 0.2 6332 2216 pts/0 S+ 01:58 0:00 grep apache そのため、rootがメインで動いており、daemonがユーザーリクエストの処理を行っており、bitnamiではApacheの実行がされていないと確認できました。 そのため、下記のコードをAWSのLightsail上で入力して、所有者の「daemon」に合わせました。 sudo chown -R daemon:daemon /opt/bitnami/apache2/logs もう一度、ログディレクトリおよびログファイルの所有者を確認するために、下記のコードを確認しました。 ログディレクトリの所有者を確認 sudo ls -ld /opt/bitnami/apache2/logs ログファイルの所有者を確認 sudo ls -l /opt/bitnami/apache2/logs -rw-r--r-- 1 daemon daemon 185025 Aug 24 23:47 access_log-20240825.gz -rw-r--r-- 1 daemon daemon 52074 Aug 31 23:36 access_log-20240901.gz -rw-r--r-- 1 daemon daemon 34642 Sep 7 23:55 access_log-20240908.gz -rw-r--r-- 1 daemon daemon 27595 Sep 14 23:51 access_log-20240915.gz -rw-r--r-- 1 daemon daemon 43269662 Sep 17 02:06 error_log -rw-r--r-- 1 daemon daemon 20808 May 25 23:43 error_log-20240526.gz -rw-r--r-- 1 daemon daemon 26231 Jun 1 23:55 error_log-20240602.gz -rw-r--r-- 1 daemon daemon 83642 Jun 8 23:55 error_log-20240609.gz -rw-r--r-- 1 daemon daemon 79606 Jun 15 23:52 error_log-20240616.gz -rw-r--r-- 1 daemon daemon 116489 Jun 22 22:21 error_log-20240623.gz -rw-r--r-- 1 daemon daemon 2660 Jun 29 23:28 error_log-20240630.gz -rw-r--r-- 1 daemon daemon 15128 Jul 6 04:24 error_log-20240707.gz -rw-r--r-- 1 daemon daemon 4394 Jul 13 12:25 error_log-20240714.gz -rw-r--r-- 1 daemon daemon 4210 Jul 20 08:19 error_log-20240721.gz -rw-r--r-- 1 daemon daemon 2086 Jul 27 23:17 error_log-20240728.gz -rw-r--r-- 1 daemon daemon 1792 Aug 3 18:14 error_log-20240804.gz -rw-r--r-- 1 daemon daemon 1205 Aug 10 04:52 error_log-20240811.gz -rw-r--r-- 1 daemon daemon 1645 Aug 17 17:11 error_log-20240818.gz -rw-r--r-- 1 daemon daemon 6139 Aug 24 09:06 error_log-20240825.gz -rw-r--r-- 1 daemon daemon 3275 Aug 31 23:27 error_log-20240901.gz -rw-r--r-- 1 daemon daemon 3839 Sep 7 21:15 error_log-20240908.gz -rw-r--r-- 1 daemon daemon 165660 Sep 14 23:51 error_log-20240915.gz srwx------ 1 daemon daemon 0 Sep 16 03:11 wsgi.2968.3.1.sock その後、エラーログファイルの内容を確認するために sudo ls -l /opt/bitnami/projects/student_info/myvenv/student_info/logs/ を確認し、下記の内容まで確認しました。 total 0 -rw-r--r-- 1 bitnami bitnami 0 Sep 13 08:37 log_20240913.log →Apache所有者でない「bitnami」が書き込みをしたが、出来ずに空ファイルになったのかなと推測できます。 ただ、再度InternalServerErrorが表示されているページを更新しましたが、新しいログが生成できていない状況です。
Hikaru-UPP

2024/09/17 08:24

>AbeTakashi エラーログの閲覧が可能になりました! ディレクトリとログファイルの権限を確認&権限の修正を下記のコードより行いました。 sudo ls -ld /opt/bitnami/projects/student_info/myvenv/student_info/logs/ sudo ls -l /opt/bitnami/projects/student_info/myvenv/student_info/logs/ sudo chown daemon:daemon /opt/bitnami/projects/student_info/myvenv/student_info/logs/ sudo chown daemon:daemon /opt/bitnami/projects/student_info/myvenv/student_info/logs/* この結果、logging設定を行う前同様に、一部のページは「ServerError500」となりますが、エラーログが下記のように出てきました。 result = block.nodelist.render(context) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/bitnami/python/lib/python3.11/site-packages/django/template/base.py", line 10 05, in render return SafeString("".join([node.render_annotated(context) for node in self])) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/bitnami/python/lib/python3.11/site-packages/django/template/base.py", line 10 05, in <listcomp> return SafeString("".join([node.render_annotated(context) for node in self])) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/bitnami/python/lib/python3.11/site-packages/django/template/base.py", line 96 6, in render_annotated return self.render(context) ^^^^^^^^^^^^^^^^^^^^ File "/opt/bitnami/python/lib/python3.11/site-packages/django/template/base.py", line 10 64, in render output = self.filter_expression.resolve(context) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/bitnami/python/lib/python3.11/site-packages/django/template/base.py", line 71 5, in resolve obj = self.var.resolve(context) ^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/bitnami/python/lib/python3.11/site-packages/django/template/base.py", line 84 7, in resolve value = self._resolve_lookup(context) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/bitnami/python/lib/python3.11/site-packages/django/template/base.py", line 89 0, in _resolve_lookup current = getattr(current, bit) ^^^^^^^^^^^^^^^^^^^^^ File "/opt/bitnami/python/lib/python3.11/site-packages/django/db/models/fields/files.py" , line 65, in url self._require_file() File "/opt/bitnami/python/lib/python3.11/site-packages/django/db/models/fields/files.py" , line 40, in _require_file raise ValueError( ValueError: The 'img' attribute has no file associated with it.
AbeTakashi

2024/09/17 14:28 編集

エラーログがでるようになったのは良かったです。おそらく正常な状態に一歩近づいたかと思います。新たにログに出るようになったエラー内容を見ると、おそらく純粋なPyhtonのエラーだと思いますので、該当ファイルと該当行を確認して、Pythonのエラーが出ないように書き換えることで、500エラーがでなくなる可能性はあると思います。Pythonのエラーの対応が分からないようであれば、この質問を自己解決済みとしてクローズして、純粋なPythonの質問として別に立てるのもありかと思います。 追記) 質問文のエラー内容も書き換えてたんですね、気付きませんでした。であれば、エラーコードに出ているファイルのソースコード(base.pyやfiles.py)がないと回答ができないと思いますので、それは追加した方が良いと思います。
Hikaru-UPP

2024/09/18 02:39

>AbeTakashi ありがとうございます! あの後、エラーコードをもう一度、出力させて、下記のエラーを確認しました。 value = self._resolve_lookup(context) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/bitnami/python/lib/python3.11/site-packages/django/te mplate/base.py", line 890, in _resolve_lookup current = getattr(current, bit) ^^^^^^^^^^^^^^^^^^^^^ File "/opt/bitnami/python/lib/python3.11/site-packages/django/db /models/fields/files.py", line 65, in url self._require_file() File "/opt/bitnami/python/lib/python3.11/site-packages/django/db /models/fields/files.py", line 40, in _require_file raise ValueError( ValueError: The 'img' attribute has no file associated with it. このことから、 ImageField に関連付けられたファイルを見つけられないということがわかりましたので、画像を保存するディレクトリの権限を確認し、そのディレクトリの権限を統一させ、また、テンプレートのimgフィールドで、空の場合をelseタグを使って下記のように記述を変更しました。 {% if student.img %} <img src="{{ student.img.url }}" style="width:100px; height:auto;"> {% else %} <p>No image available</p> {% endif %} その結果、無事にServerErrorを解決することができました。 ご協力ありがとうございました!
guest

回答1

0

自己解決

【ロギング設定におけるエラー解消】
私の場合は、ロギング設定のsettings.pyに問題があったというよりも、「logsディレクトリの権限がそれぞれ一致してなかった」ことがロギング設定のエラーの原因でした。

①httpサーバがbitnamiユーザで動いてるかを確認する
→AWSのLightsailコンソールにて、下記のコードを入力

ps aux | grep apache

その結果、下記のような内容を確認することができました。

root 2968 0.0 1.4 21680 13820 ? Ss Sep13 0:15 /opt/bitnami/apache/bin /httpd -f /opt/bitnami/apache/conf/httpd.conf daemon 28688 0.0 6.9 401836 66812 ? Sl Sep16 0:05 /opt/bitnami/apache/bin /httpd -f /opt/bitnami/apache/conf/httpd.conf daemon 28689 0.0 4.5 385436 43580 ? Sl Sep16 0:05 /opt/bitnami/apache/bin /httpd -f /opt/bitnami/apache/conf/httpd.conf daemon 28690 0.0 3.0 2077680 29596 ? Sl Sep16 0:00 /opt/bitnami/apache/bin /httpd -f /opt/bitnami/apache/conf/httpd.conf daemon 28691 0.0 2.5 2078212 24620 ? Sl Sep16 0:00 /opt/bitnami/apache/bin /httpd -f /opt/bitnami/apache/conf/httpd.conf daemon 29544 0.0 3.0 2077708 29624 ? Sl Sep16 0:00 /opt/bitnami/apache/bin /httpd -f /opt/bitnami/apache/conf/httpd.conf bitnami 38268 0.0 0.2 6332 2216 pts/0 S+ 01:58 0:00 grep apache

この内容から、rootユーザーがメインで動いてくれており、ユーザーからのリクエスト処理をしているのが「daemon」ということがわかったので、ログディレクトリとその中のファイルの権限をdaemonに統一するようにしました。

sudo chown -R daemon:daemon /opt/bitnami/apache2/logs

その結果、ディレクトリとその直下に来ているファイルの権限が変更となっているのかを、下記のコードにて確認しました。

【ログディレクトリの所有者を確認】 sudo ls -ld /opt/bitnami/apache2/logs
【ログディレクトリの所有者を確認】 sudo ls -l /opt/bitnami/apache2/logs 【ログファイルの所有者を確認】 sudo ls -l /opt/bitnami/apache2/logs

この後、Apacheを再起動させて、エラーログを確認できるようになりました。

【生徒詳細ページのServerError】
下記のエラーをログを参考に、どこを改善すべきかをもう一度洗い出すことにしました。

Traceback (most recent call last): File "/opt/bitnami/python/lib/python3.11/site-packages/django/template/base.py", line 88 0, in _resolve_lookup current = current[bit] ~~~~~~~^^^^^ TypeError: 'ImageFieldFile' object is not subscriptable During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/opt/bitnami/python/lib/python3.11/site-packages/django/template/base.py", line 89 0, in _resolve_lookup current = getattr(current, bit) ^^^^^^^^^^^^^^^^^^^^^ File "/opt/bitnami/python/lib/python3.11/site-packages/django/db/models/fields/files.py" , line 65, in url self._require_file() File "/opt/bitnami/python/lib/python3.11/site-packages/django/db/models/fields/files.py" , line 40, in _require_file raise ValueError( ValueError: The 'img' attribute has no file associated with it. 2024-09-17 17:12:43,358 [ERROR] Internal Server Error: /students/detail/6 Traceback (most recent call last): File "/opt/bitnami/python/lib/python3.11/site-packages/django/template/base.py", line 88 0, in _resolve_lookup current = current[bit] ~~~~~~~^^^^^ TypeError: 'ImageFieldFile' object is not subscriptable During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/opt/bitnami/python/lib/python3.11/site-packages/django/core/handlers/exception.py ", line 56, in inner response = get_response(request) ^^^^^^^^^^^^^^^^^^^^^ File "/opt/bitnami/python/lib/python3.

そこで、imgの下記のように変更しました。
【変更前】
img = models.ImageField(blank=True)

【変更後】
img = models.ImageField(blank=True, null=True)

これによって、画像が設定していない場合のエラーを避けるためです。

また、テンプレートの表示も、「もし画像ファイルが空の場合を想定してコードに切り替えました。」

<div class="col-md-6"> {% if student.img %} <img src="{{ student.img.url }}" style="width:100px; height:auto;"> {% else %} <p>写真がありません</p> {% endif %} </div>

これによって、一部ServerErrorが解消されました!
このほかにも、画像を表示させるページがエラー解消になりましたので、一旦は自己解決とさせていただきました!
皆様のご協力ありがとうございました!

投稿2024/09/18 03:01

Hikaru-UPP

総合スコア6

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.34%

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

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

質問する

関連した質問