前提・実現したいこと
結論から言うとheroku application errorを突破したいです。
python,heroku,flask,line-apiを使ってLINE BOTを作ろうとしています。しかしgit push heroku masterをした後にheroku openを実行してみるとweb側でapplication errorになります。そこではheroku logs -tail でログを見てねと言っているのでログを見てみると
at=error code=H10 desc="App crashed" method=GET path="/" host=perfect-order-bot.herokuapp.com request_id=2cfb3810-89e3-4d9e-9b8b-02444546b557 fwd="180.4.145.1" dyno= connect= service= status=503 bytes= protocol=https
と表示されていたので、heroku H10 503で調べてみましたが、解決策は出てきませんでした。
Procfileが怪しいのかなと思っています。それかgunicornをrequirements.txtに追加しないといけないというのをちらっと見かけた気もします。あとローカルの環境では試していません。やり方がわからなかったので。ngrokを使うとできるらしいですけどよくわかりませんでした。
どなたか助けてください。よろしくお願いします。
Procfile
1web: gunicorn perfect-order-bot:main --log-file -
requirements
1Flask==1.0.2 2line-bot-sdk==1.8.0 3numpy==1.16.2 4oandapy==0.0.9 5oandapyV20==0.6.3 6pandas==0.24.2 7plotly==3.8.1 8requests==2.21.0 9schedule==0.6.0
runtime
1python-3.7.3
発生している問題・エラーメッセージ
State changed from crashed to starting 2019-05-12T08:38:37.599155+00:00 heroku[web.1]: Starting process with command `gunicorn main:app --log-file -` 2019-05-12T08:38:39.793438+00:00 heroku[web.1]: State changed from starting to crashed 2019-05-12T08:38:39.773600+00:00 heroku[web.1]: Process exited with status 127 2019-05-12T08:38:39.697936+00:00 app[web.1]: bash: gunicorn: command not found Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch 2019-05-12T05:14:16.786948+00:00 heroku[web.1]: Stopping process with SIGKILL 2019-05-12T05:14:16.890230+00:00 heroku[web.1]: State changed from starting to crashed 2019-05-12T05:14:16.897017+00:00 heroku[web.1]: State changed from crashed to starting 2019-05-12T05:14:16.876908+00:00 heroku[web.1]: Process exited with status 137 2019-05-12T05:14:22.033199+00:00 heroku[web.1]: Starting process with command `python main.py` 2019-05-12T05:15:22.724959+00:00 heroku[web.1]: State changed from starting to crashed 2019-05-12T05:15:22.642858+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch 2019-05-12T05:15:22.642944+00:00 heroku[web.1]: Stopping process with SIGKILL 2019-05-12T05:15:22.710034+00:00 heroku[web.1]: Process exited with status 137
エラーの種類はこれだけです。
該当のソースコード
python
1from flask import Flask, request, abort 2 3from linebot import ( 4 LineBotApi, WebhookHandler 5) 6from linebot.exceptions import ( 7 InvalidSignatureError, LineBotApiError 8) 9from linebot.models import ( 10 FollowEvent, MessageEvent, TextMessage, TextSendMessage, ImageMessage, ImageSendMessage, TemplateSendMessage, ButtonsTemplate, PostbackTemplateAction, MessageTemplateAction, URITemplateAction 11) 12import os 13app = Flask(__name__) 14 15 16#環境変数からLINE Access Tokenを設定 17LINE_CHANNEL_ACCESS_TOKEN = os.environ["LINE_CHANNEL_ACCESS_TOKEN"] 18#環境変数からLINE Channel Secretを設定 19LINE_CHANNEL_SECRET = os.environ["LINE_CHANNEL_SECRET"] 20 21line_bot_api = LineBotApi(LINE_CHANNEL_ACCESS_TOKEN) 22handler = WebhookHandler(LINE_CHANNEL_SECRET) 23 24 25@app.route("/callback", methods=['POST']) 26def callback(): 27 # get X-Line-Signature header value 28 signature = request.headers['X-Line-Signature'] 29 30 # get request body as text 31 body = request.get_data(as_text=True) 32 app.logger.info("Request body: " + body) 33 34 # handle webhook body 35 try: 36 handler.handle(body, signature) 37 except InvalidSignatureError: 38 abort(400) 39 40 return 'OK' 41 42 43 44# MessageEvent 45@handler.add(MessageEvent, message=TextMessage) 46def handle_message(event): 47 line_bot_api.reply_message( 48 event.reply_token, 49 TextSendMessage(text='暇人か!') 50 ) 51if __name__ == "__main__": 52 port = int(os.getenv("PORT", 5000)) 53 app.run(host="0.0.0.0", port=port)
試したこと
LINE Developers のWebhook URLのところの接続確認を押してみるとWebhookが無効なHTTPステータスコードを返しました(期待されるステータスコードは200です)というエラーメッセージが出ます。
LINEの方に試しにメッセージを送ってみると既読がつくだけです。
LINEのシークレットキーとアクセストークンはherokuに設定しています。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー