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

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

新規登録して質問してみよう
ただいま回答率
85.49%
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による文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

551閲覧

flask heroku を使用してアプリテスト

Jose

総合スコア14

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による文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/05/13 06:45

編集2018/05/13 11:01

pythonを独学で勉強しています。flaskでアプリを開発中です。
ログインしたのち、出勤パターン(30分、60分、90分)を選択して、終了予定時間
を出力するという流れです。

ローカル(127.0.0.1)ではうまくいきましたが、
herokuでの動作がうまくいきません。

デプロイはできるのですが、最初のログインページを表示できず、Application Errorとでます。

修正方法ご教示いただければ幸いです。

python

1# -*- coding: utf-8 -*- 2import sqlite3 3from flask import Flask, request, session, g, redirect, url_for, abort, render_template, flash 4from contextlib import closing 5import datetime 6 7# 各種設定 8DATABASE = 'flaskr.db' # <- チュートリアルと異なる 9DEBUG = True 10SECRET_KEY = 'development key' 11USERNAME = 'admin' 12PASSWORD = 'default' 13COURSE30 = '30' 14COURSE60 = '60' 15COURSE90 = '90' 16MODORU = 1 17 18minutes = 30 19 20# アプリ生成 21app = Flask(__name__) 22app.config.from_object(__name__) 23app.config.from_envvar('FLASKR_SETTINGS', silent=True) 24 25 26# DB接続 27def connect_db(): 28 return sqlite3.connect(app.config['DATABASE']) 29 30 31def init_db(): 32 with closing(connect_db()) as db: 33 with app.open_resource('schema.sql', mode='r') as f: 34 db.cursor().executescript(f.read()) 35 db.commit() 36 37@app.before_request 38def before_request(): 39 g.db = connect_db() 40 41@app.teardown_request 42def teardown_request(exception): 43 db = getattr(g, 'db', None) 44 if db is not None: 45 db.close() 46 47 48#ユーザのログインとログアウトを行うためのページ 49@app.route('/login', methods=['GET', 'POST']) 50def login(): 51 error = None 52 if request.method == 'POST': 53 if request.form['username'] != app.config['USERNAME']: 54 error = u'ユーザ名が間違っています' 55 elif request.form['password'] != app.config['PASSWORD']: 56 error = u'パスワードが間違っています' 57 else: 58 session['logged_in'] = True 59 flash(u'ログインしました') 60 return redirect(url_for('show_entries')) 61 return render_template('login.html', error=error) 62 63 64@app.route('/logout') 65def logout(): 66 session.pop('logged_in', None) 67 flash(u'ログアウトしました') 68 return redirect(url_for('login')) 69 70 71#データベースに保存されている全てのエントリーの一覧のページ 72@app.route('/show_entries', methods=['GET', 'POST']) 73def show_entries(): 74 error = None 75 if request.method == 'POST': 76 if request.form['comp_select'] == app.config['COURSE30']: 77 time = datetime.datetime.now() 78 time1 = time + datetime.timedelta(minutes=30) 79 time1 = time1.strftime("%H:%M") 80 # return redirect(url_for('course30')) 81 return render_template('course30.html', time1=time1) 82 elif request.form['comp_select'] == app.config['COURSE60']: 83 time = datetime.datetime.now() 84 time1 = time + datetime.timedelta(minutes=60) 85 time1 = time1.strftime("%H:%M") 86 # return redirect(url_for('course30')) 87 return render_template('course30.html', time1=time1) 88 elif request.form['comp_select'] == app.config['COURSE90']: 89 time = datetime.datetime.now() 90 time1 = time + datetime.timedelta(minutes=90) 91 time1 = time1.strftime("%H:%M") 92 # return redirect(url_for('course30')) 93 return render_template('course30.html', time1=time1) 94 elif request.form['comp_select'] == app.config['MODORU']: 95 return render_template('show_entries.html', modoru=modoru) 96 return render_template('show_entries.html', error=error) 97 98@app.route("/course30" , methods=['GET', 'POST']) 99def course30(): 100 return render_template('course30.html', time1=time1) 101 102if __name__ == '__main__': 103 app.run()

layout.html

1<!doctype html> 2<link rel=stylesheet type=text/css href="{{ url_for('static', filename='style.css') }}"> 3<div class="page"> 4 <div class="metanav"> 5 {% if not session.logged_in %} 6 <a href="{{ url_for('login') }}">ログイン</a> 7 {% else %} 8 <a href="{{ url_for('logout') }}">ログアウト</a> 9 {% endif %} 10 </div> 11 {% block body1 %}{% endblock %} 12</div>

login.html

show_entries.html

1{% extends "layout.html" %} 2{% block body1 %} 3 {% if error %}<p class="error"><strong>エラー:</strong> {{ error }}{% endif %} 4 <form action="{{ url_for('show_entries') }}" method="post"> 5 <dl> 6 <dt>コースを選んでください: 7 </dl> 8 <dl> 9 <select class="form-group" id="comp_select" name="comp_select"> 10 <option value="30">30分</option> 11 <option value="60">60分</option> 12 <option value="90">90分</option> 13 </select> 14 </dl> 15 <div class="form-group"> 16 <button type="submit" value="Go!" >決定</button> 17 </div> 18 </form> 19{% endblock %}

course30.html

1{% extends "layout.html" %} 2{% block body1 %} 3 {% if session.logged_in %} 4 <strong>終了時間:</strong> {{ time1 }} 5 <div class="form-group"> 6 <button type="submit" value="Go!" onclick="location.href='http://127.0.0.1:5000/show_entries'">戻る</button> 7 </div> 8 {% endif %} 9{% endblock %}

python

1#エラーログとなります 22018-05-13T10:46:00.756011+00:00 heroku[web.1]: Starting process with command `python flaskr.py` 32018-05-13T10:46:03.494552+00:00 app[web.1]: * Serving Flask app "flaskr" (lazy loading) 42018-05-13T10:46:03.494672+00:00 app[web.1]: * Environment: production 52018-05-13T10:46:03.494773+00:00 app[web.1]: WARNING: Do not use the development server in a production environment. 62018-05-13T10:46:03.494844+00:00 app[web.1]: Use a production WSGI server instead. 72018-05-13T10:46:03.494934+00:00 app[web.1]: * Debug mode: on 82018-05-13T10:46:03.516227+00:00 app[web.1]: * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) 92018-05-13T10:46:03.517431+00:00 app[web.1]: * Restarting with stat 102018-05-13T10:46:03.931812+00:00 app[web.1]: * Debugger is active! 112018-05-13T10:46:03.933293+00:00 app[web.1]: * Debugger PIN: 930-711-696 122018-05-13T10:47:01.073754+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch 132018-05-13T10:47:01.073998+00:00 heroku[web.1]: Stopping process with SIGKILL 142018-05-13T10:47:01.161020+00:00 heroku[web.1]: State changed from starting to crashed 152018-05-13T10:47:01.163257+00:00 heroku[web.1]: State changed from crashed to starting 162018-05-13T10:47:01.145341+00:00 heroku[web.1]: Process exited with status 137 172018-05-13T10:47:03.889944+00:00 heroku[web.1]: Starting process with command `python flaskr.py` 182018-05-13T10:47:05.549637+00:00 app[web.1]: * Serving Flask app "flaskr" (lazy loading) 192018-05-13T10:47:05.549656+00:00 app[web.1]: * Environment: production 202018-05-13T10:47:05.549690+00:00 app[web.1]: WARNING: Do not use the development server in a production environment. 212018-05-13T10:47:05.549725+00:00 app[web.1]: Use a production WSGI server instead. 222018-05-13T10:47:05.549754+00:00 app[web.1]: * Debug mode: on 232018-05-13T10:47:05.566177+00:00 app[web.1]: * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) 242018-05-13T10:47:05.566970+00:00 app[web.1]: * Restarting with stat 252018-05-13T10:47:05.811050+00:00 app[web.1]: * Debugger PIN: 142-137-009 262018-05-13T10:47:05.809616+00:00 app[web.1]: * Debugger is active! 272018-05-13T10:48:04.080389+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch 282018-05-13T10:48:04.080451+00:00 heroku[web.1]: Stopping process with SIGKILL 292018-05-13T10:48:04.149952+00:00 heroku[web.1]: Process exited with status 137 302018-05-13T10:48:04.167841+00:00 heroku[web.1]: State changed from starting to crashed 312018-05-13T10:58:26.029485+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=dry-meadow-50578.herokuapp.com request_id=e48f6816-575e-4a8b-bc3f-4cee3ae72343 fwd="126.87.104.45" dyno= connect= service= status=503 bytes= protocol=https 322018-05-13T10:58:27.120667+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=dry-meadow-50578.herokuapp.com request_id=4faa11fd-8c8b-4de6-af99-b25068d34f91 fwd="126.87.104.45" dyno= connect= service= status=503 bytes= protocol=https 33

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

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

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

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

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

Lulucom

2018/05/13 07:13

Herokuのログを確認してエラーの詳細を追記ください(質問文の中に追記ください)。
Jose

2018/05/13 11:02

エラーログ追記しました。Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launchという部分があやしいと思いますが、いかがでしょうか?よろしくお願いいたします
guest

回答1

0

ベストアンサー

app.run()呼出しを少し変更する必要があるようです。

python

1 port = int(os.environ.get("PORT", 5000)) 2 app.run(host="0.0.0.0", port=port)

参考: http://shkh.hatenablog.com/entry/2013/01/01/192857

投稿2018/05/13 12:29

Lulucom

総合スコア1899

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

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

Jose

2018/05/14 14:15

無事動作しました。ご回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問