質問編集履歴

1 エラーログの追加

Jose

Jose score 12

2018/05/13 20:01  投稿

flask heroku を使用してアプリテスト
> 引用テキストpythonを独学で勉強しています。flaskでアプリを開発中です。
pythonを独学で勉強しています。flaskでアプリを開発中です。
ログインしたのち、出勤パターン(30分、60分、90分)を選択して、終了予定時間
を出力するという流れです。
ローカル(127.0.0.1)ではうまくいきましたが、
herokuでの動作がうまくいきません。
デプロイはできるのですが、最初のログインページを表示できず、Application Errorとでます。
修正方法ご教示いただければ幸いです。
``` python flask
# -*- coding: utf-8 -*-
import sqlite3
from flask import Flask, request, session, g, redirect, url_for, abort, render_template, flash
from contextlib import closing
import datetime
# 各種設定
DATABASE = 'flaskr.db' # <- チュートリアルと異なる
DEBUG = True
SECRET_KEY = 'development key'
USERNAME = 'admin'
PASSWORD = 'default'
COURSE30 = '30'
COURSE60 = '60'
COURSE90 = '90'
MODORU = 1
minutes = 30
# アプリ生成
app = Flask(__name__)
app.config.from_object(__name__)
app.config.from_envvar('FLASKR_SETTINGS', silent=True)
# DB接続
def connect_db():
   return sqlite3.connect(app.config['DATABASE'])
def init_db():
   with closing(connect_db()) as db:
       with app.open_resource('schema.sql', mode='r') as f:
           db.cursor().executescript(f.read())
       db.commit()
@app.before_request
def before_request():
   g.db = connect_db()
@app.teardown_request
def teardown_request(exception):
   db = getattr(g, 'db', None)
   if db is not None:
       db.close()
#ユーザのログインとログアウトを行うためのページ
@app.route('/login', methods=['GET', 'POST'])
def login():
   error = None
   if request.method == 'POST':
       if request.form['username'] != app.config['USERNAME']:
           error = u'ユーザ名が間違っています'
       elif request.form['password'] != app.config['PASSWORD']:
           error = u'パスワードが間違っています'
       else:
           session['logged_in'] = True
           flash(u'ログインしました')
           return redirect(url_for('show_entries'))
   return render_template('login.html', error=error)
@app.route('/logout')
def logout():
   session.pop('logged_in', None)
   flash(u'ログアウトしました')
   return redirect(url_for('login'))
#データベースに保存されている全てのエントリーの一覧のページ
@app.route('/show_entries', methods=['GET', 'POST'])
def show_entries():
   error = None
   if request.method == 'POST':
       if request.form['comp_select'] == app.config['COURSE30']:
           time = datetime.datetime.now()
           time1 = time + datetime.timedelta(minutes=30)
           time1 = time1.strftime("%H:%M")
           # return redirect(url_for('course30'))
           return render_template('course30.html', time1=time1)
       elif request.form['comp_select'] == app.config['COURSE60']:
           time = datetime.datetime.now()
           time1 = time + datetime.timedelta(minutes=60)
           time1 = time1.strftime("%H:%M")
           # return redirect(url_for('course30'))
           return render_template('course30.html', time1=time1)
       elif request.form['comp_select'] == app.config['COURSE90']:
           time = datetime.datetime.now()
           time1 = time + datetime.timedelta(minutes=90)
           time1 = time1.strftime("%H:%M")
           # return redirect(url_for('course30'))
           return render_template('course30.html', time1=time1)
       elif request.form['comp_select'] == app.config['MODORU']:
           return render_template('show_entries.html', modoru=modoru)
   return render_template('show_entries.html', error=error)
@app.route("/course30" , methods=['GET', 'POST'])
def course30():
   return render_template('course30.html', time1=time1)
if __name__ == '__main__':
   app.run()
```
```layout.html
<!doctype html>
<link rel=stylesheet type=text/css href="{{ url_for('static', filename='style.css') }}">
<div class="page">
 <div class="metanav">
 {% if not session.logged_in %}
   <a href="{{ url_for('login') }}">ログイン</a>
 {% else %}
   <a href="{{ url_for('logout') }}">ログアウト</a>
 {% endif %}
 </div>
 {% block body1 %}{% endblock %}
</div>
```
```login.html
{% extends "layout.html" %}
{% block body1 %}
 {% if error %}<p class="error"><strong>エラー:</strong> {{ error }}{% endif %}
 <form action="{{ url_for('login') }}" method="post">
   <dl>
     <dt>ユーザ名:
     <dd><input type="text" name="username">
     <dt>パスワード:
     <dd><input type="password" name="password">
     <dd><input type="submit" value="ログイン">
   </dl>
 </form>
{% endblock %}
```
```show_entries.html
{% extends "layout.html" %}
{% block body1 %}
   {% if error %}<p class="error"><strong>エラー:</strong> {{ error }}{% endif %}
   <form action="{{ url_for('show_entries') }}" method="post">
     <dl>
       <dt>コースを選んでください:
     </dl>
     <dl>
       <select class="form-group" id="comp_select" name="comp_select">
         <option value="30">30分</option>
         <option value="60">60分</option>
         <option value="90">90分</option>
       </select>
     </dl>
     <div class="form-group">
       <button type="submit" value="Go!" >決定</button>
     </div>
   </form>
{% endblock %}
```
```course30.html
{% extends "layout.html" %}
{% block body1 %}
 {% if session.logged_in %}
     <strong>終了時間:</strong> {{ time1 }}
     <div class="form-group">
       <button type="submit" value="Go!" onclick="location.href='http://127.0.0.1:5000/show_entries'">戻る</button>
     </div>
 {% endif %}
{% endblock %}
```  
 
```python  
#エラーログとなります  
2018-05-13T10:46:00.756011+00:00 heroku[web.1]: Starting process with command `python flaskr.py`  
2018-05-13T10:46:03.494552+00:00 app[web.1]: * Serving Flask app "flaskr" (lazy loading)  
2018-05-13T10:46:03.494672+00:00 app[web.1]: * Environment: production  
2018-05-13T10:46:03.494773+00:00 app[web.1]: WARNING: Do not use the development server in a production environment.  
2018-05-13T10:46:03.494844+00:00 app[web.1]: Use a production WSGI server instead.  
2018-05-13T10:46:03.494934+00:00 app[web.1]: * Debug mode: on  
2018-05-13T10:46:03.516227+00:00 app[web.1]: * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)  
2018-05-13T10:46:03.517431+00:00 app[web.1]: * Restarting with stat  
2018-05-13T10:46:03.931812+00:00 app[web.1]: * Debugger is active!  
2018-05-13T10:46:03.933293+00:00 app[web.1]: * Debugger PIN: 930-711-696  
2018-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  
2018-05-13T10:47:01.073998+00:00 heroku[web.1]: Stopping process with SIGKILL  
2018-05-13T10:47:01.161020+00:00 heroku[web.1]: State changed from starting to crashed  
2018-05-13T10:47:01.163257+00:00 heroku[web.1]: State changed from crashed to starting  
2018-05-13T10:47:01.145341+00:00 heroku[web.1]: Process exited with status 137  
2018-05-13T10:47:03.889944+00:00 heroku[web.1]: Starting process with command `python flaskr.py`  
2018-05-13T10:47:05.549637+00:00 app[web.1]: * Serving Flask app "flaskr" (lazy loading)  
2018-05-13T10:47:05.549656+00:00 app[web.1]: * Environment: production  
2018-05-13T10:47:05.549690+00:00 app[web.1]: WARNING: Do not use the development server in a production environment.  
2018-05-13T10:47:05.549725+00:00 app[web.1]: Use a production WSGI server instead.  
2018-05-13T10:47:05.549754+00:00 app[web.1]: * Debug mode: on  
2018-05-13T10:47:05.566177+00:00 app[web.1]: * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)  
2018-05-13T10:47:05.566970+00:00 app[web.1]: * Restarting with stat  
2018-05-13T10:47:05.811050+00:00 app[web.1]: * Debugger PIN: 142-137-009  
2018-05-13T10:47:05.809616+00:00 app[web.1]: * Debugger is active!  
2018-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  
2018-05-13T10:48:04.080451+00:00 heroku[web.1]: Stopping process with SIGKILL  
2018-05-13T10:48:04.149952+00:00 heroku[web.1]: Process exited with status 137  
2018-05-13T10:48:04.167841+00:00 heroku[web.1]: State changed from starting to crashed  
2018-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  
2018-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  
 
```
  • Python

    14055 questions

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

  • Flask

    416 questions

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

  • Heroku

    1376 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る