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

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

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

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Heroku

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

Python

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

解決済

herokuで「Internal Server Error」が出てしまう

mmtt
mmtt

総合スコア22

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Heroku

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

Python

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

2回答

0評価

0クリップ

684閲覧

投稿2021/12/18 04:34

編集2021/12/18 04:52

#概要
Flaskを用いて、web上でのクイアプリ(ランダムに出題され、正誤判定が出る)を作成しています。
ローカルでは問題なく動くものの、herokuにデプロイした環境では特定のページが「Internal Server Error」 になってしまっています。
解決策をご教示いただけると嬉しいです。よろしくお願いいたします。

#ファイル構成
app.py
templates
|-base.html
|-index.html
|-question.html
quiz.csv
など。
トップページである「https://shikaq.herokuapp.com/」は正常に表示されますが、「https://shikaq.herokuapp.com/question」を開くとエラーが出てしまう状況です。

#herokuのログ

herokulog

2021-12-18T04:11:09.679243+00:00 app[web.1]: [2021-12-18 04:11:09,678] ERROR in app: Exception on /question [GET] 2021-12-18T04:11:09.679252+00:00 app[web.1]: Traceback (most recent call last): 2021-12-18T04:11:09.679253+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/flask/app.py", line 2070, in wsgi_app 2021-12-18T04:11:09.679253+00:00 app[web.1]: response = self.full_dispatch_request() 2021-12-18T04:11:09.679254+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/flask/app.py", line 1515, in full_dispatch_request 2021-12-18T04:11:09.679255+00:00 app[web.1]: rv = self.handle_user_exception(e) 2021-12-18T04:11:09.679255+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/flask/app.py", line 1513, in full_dispatch_request 2021-12-18T04:11:09.679256+00:00 app[web.1]: rv = self.dispatch_request() 2021-12-18T04:11:09.679256+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/flask/app.py", line 1499, in dispatch_request 2021-12-18T04:11:09.679256+00:00 app[web.1]: return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args) 2021-12-18T04:11:09.679257+00:00 app[web.1]: File "/app/app.py", line 79, in read 2021-12-18T04:11:09.679257+00:00 app[web.1]: + str(q_num)/10*100 + '%;" aria-valuenow="' + str(q_num)/10*100 2021-12-18T04:11:09.679257+00:00 app[web.1]: NameError: name 'q_num' is not defined 2021-12-18T04:11:09.679952+00:00 app[web.1]:xxx - - [18/Dec/2021:04:11:09 +0000] "GET /question HTTP/1.1" 500 290 "https://shikaq.herokuapp.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/xxx (KHTML, like Gecko) Chrome/xxx Safari/xxx" 2021-12-18T04:11:09.682762+00:00 heroku[router]: at=info method=GET path="/question" host=shikaq.herokuapp.com request_id=XXX fwd="xxx" dyno=web.1 connect=0ms service=2ms status=500 bytes=463 protocol=https

#該当のソースコード

python

from flask import Flask, render_template, request import reload import sys sys.dont_write_bytecode = True app = Flask(__name__) global df_all df_all = reload.df @app.route('/') def index(): global df_all df_all = reload.df global q_df q_df = reload.df q_df = q_df.sample(n=10).reset_index(drop=True) global list_question list_question = list(q_df.loc[:, 'question']) global list_q_type list_q_type = list(q_df.loc[:, 'q_type']) global list_choice_1 list_choice_1 = list(q_df.loc[:, 'choice_1']) global list_choice_2 list_choice_2 = list(q_df.loc[:, 'choice_2']) global list_choice_3 list_choice_3 = list(q_df.loc[:, 'choice_3']) global list_choice_4 list_choice_4 = list(q_df.loc[:, 'choice_4']) global list_choice_5 list_choice_5 = list(q_df.loc[:, 'choice_5']) global list_answer list_answer = list(q_df.loc[:, 'answer']) global list_category list_category = list(q_df.loc[:, 'category']) global list_comment list_comment = list(q_df.loc[:, 'comment']) global list_index list_index = list(q_df.index) global list_id list_id = list(q_df.loc[:, 'id']) global list_choice list_choice = [] global list_truefalse list_truefalse = [] global q_num # リスト指定用。その問題が表示された時にリストの何番目を選択するのか q_num = 0 return render_template('index.html') @app.route('/question', methods=['GET', 'POST']) def read(): global q_num if request.method == 'GET': choice = request.args.get('send', 'None Selected') progress = '<div class="progress-bar" role="progressbar" style="width:' + str(q_num)/10*100 + '%;" aria-valuenow="' + str(q_num)/10*100 + '" aria-valuemin="0" aria-valuemax="100"></div>' return render_template('question.html', choice=choice, list_question=list_question, list_q_type=list_q_type, list_choice_1=list_choice_1, list_choice_2=list_choice_2, list_choice_3=list_choice_3, list_choice_4=list_choice_4, list_choice_5=list_choice_5, list_answer=list_answer, list_category=list_category, list_comment=list_comment, list_index=list_index, q_num=q_num, list_id=list_id, list_truefalse=list_truefalse, progress=progress) elif request.method == 'POST': choice = request.form.get("send") list_choice.append(choice) progress = '<div class="progress-bar" role="progressbar" style="width:' + str(q_num)/10*100 + '%;" aria-valuenow="' + str(q_num)/10*100 + '" aria-valuemin="0" aria-valuemax="100"></div>' list_truefalse.append(list_choice[q_num] == list_answer[q_num]) q_num = len(list_choice) return render_template('question.html', choice=choice, list_question=list_question, list_q_type=list_q_type, list_choice_1=list_choice_1, list_choice_2=list_choice_2, list_choice_3=list_choice_3, list_choice_4=list_choice_4, list_choice_5=list_choice_5, list_answer=list_answer, list_category=list_category, list_comment=list_comment, list_index=list_index, list_choice=list_choice, q_num=q_num, list_id=list_id, list_truefalse=list_truefalse, progress=progress) @app.route('/result') def result(): true_count = list_truefalse.count(True) answered_count = len(list_truefalse) true_rate = true_count / answered_count pie = "<div class='pie' style='display: flex; justify-content: center;" + "align-items: center; margin-right: auto; margin-left: auto;" +"width: 300px; height: 300px; font-size: 26px; font-weight: 700;" + "background-image: radial-gradient(#f2f2f2 30%, transparent 31%)," + "conic-gradient(#0A8EA0 0% " + str(round(true_rate*100)) + "%, #d9d9d9 " + str(round(true_rate*100)) + "% 100%); border-radius: 50%;'>" + str(round(true_rate*100)) + "%</div>" return render_template('result.html', list_question=list_question, list_q_type=list_q_type, list_choice_1=list_choice_1, list_choice_2=list_choice_2, list_choice_3=list_choice_3, list_choice_4=list_choice_4, list_choice_5=list_choice_5, list_answer=list_answer, list_comment=list_comment, list_index=list_index, q_num=q_num, list_id=list_id, list_truefalse=list_truefalse, true_rate=true_rate, pie=pie) @app.route('/qanda/<int:id>') def read_qa(id): post = df_all.loc[id] return render_template('qanda.html', post=post) @app.errorhandler(404) def page_not_found(error): return render_template('404.html'), 404 if __name__ == "__main__": app.run()

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Heroku

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

Python

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