Q&A

Vercel.com上でのWEBHOOKHandlerの動作について(Python)

前提・実現したいこと

Python&Flaskを用いてLINEAPIを用いたアプリの開発を行っており、諸事情によりVercel.comにデプロイして運用しようと考えています。

発生している問題・エラーメッセージ

ローカル環境上では、正常に動作するソース(下参照)をVercelにデプロイすると以下のエラーが発生してしまいます。各行順番に消していって、WebhookHandlerの行がなければエラーが発生しないことを確認しました。(ソースコードはエラーが発生する最小限のものを載せます。) [GET] / 17:46:19:13 [ERROR] TypeError: issubclass() arg 1 must be a class Traceback (most recent call last): File "/var/lang/lib/python3.9/importlib/init.py", line 127, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1030, in _gcd_import File "<frozen importlib._bootstrap>", line 1007, in _find_and_load File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 680, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 850, in exec_module File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed File "/var/task/vc__handler__python.py", line 30, in <module> if not issubclass(base, BaseHTTPRequestHandler): Unknown application error occurred

該当のソースコード

from flask import Flask, request, abort,render_template from linebot import LineBotApi, WebhookHandler from linebot.exceptions import InvalidSignatureError from linebot.models import MessageEvent, FollowEvent,UnfollowEvent, TextMessage, TextSendMessage,FlexSendMessage #from Friends import friend #from scheduler import Schedular #from Flax import Flax import os import json import datetime CHANNEL_ACCESS_TOKEN = os.environ["LINE_CHANNEL_ACCESS_TOKEN"] LINE_CHANNEL_SECRET = os.environ["LINE_CHANNEL_SECRET"]

versions='alpha1' line_bot_api = LineBotApi(CHANNEL_ACCESS_TOKEN) handler = WebhookHandler(LINE_CHANNEL_SECRET) app = Flask(name) @app.route('/') def f(): return "OK"

試したこと

各行順番に消していって、WebhookHandlerの行がなければエラーが発生しないことを確認しました。 ネットを利用して情報を探しましたが全く見つからなかったため手のつけようがありませんでした。

補足情報(FW/ツールのバージョンなど)

ローカル環境(実行できる環境) Windows 10 home 64bit Vercel.com Hobbyプラン Flask==2.0.2 line-bot-sdk==2.1.0

どなたか詳しい方がいらっしゃいましたらよろしくお願いいたします。

  • 0
  • 5
  • 1696
  • twitter facebook

自己解決いたしました。

WebhookHandlerの行でhandlerを識別子として使用していましたがこれがまずかったようです。 handleと変更したら動作しました。

どこかに書いてあったのかもしれませんが見落としていました。 自分の不注意で皆さんにご迷惑をおかけいたしました。 ご協力いただいたお二方ありがとうございました。

  • 0

ksytさんご回答ありがとうございます。 自分もそのように考えているのですが、普通のhtmlだけを返すアプリケーションは動作するのにWebhookHandlerのオブジェクトを作成する部分を追加した途端エラーが発生するので困っています。

諦めて別のサービスを利用した方がいいですかね…

  • 0

Vercelの実行環境に依存したエラーに見えます。

まず初めにVercelで動くアプリケーションをドキュメントなどを参考にして作成後、そのアプリケーションにmessaging apiへのアクセスを追加していくのがエラーを出さずに開発できる方法の1つな気がします。

  • 0

Koki様ご回答ありがとうございます。

 Python&Flaskを用いてLINEAPIを用いたアプリについてですが、LINEbotとhtmlを返すものを組み合わせた運用を考えています。

POSTメソッドについてですが、ソース全体を削った時に間違えて削ってしまいました。 実際にはPOSTの処理をするコードも記述しています

app = Flask(__name__)について、コピーする過程で消えてしまったようです。    色々ミスがあり申し訳ありません。 

  • 0

以下を教えてほしいです。

Python&Flaskを用いてLINEAPIを用いたアプリとは具体的になんですか? LINE botならはっきりそう書いてください。 ・ WebhookはPOSTメソッドを実行する必要がありますが、関数にPOSTメソッドを実行する関数が無いのはなんでですか?単純にデプロイしたWebアプリの動作を確認したいだけですか?もしそうであれば質問のタイトルが不適切です

あと、コード見る限りだとapp = Flask(name)とありますがこのnameの定義がありませんがこれはなんですか?__name__の間違いじゃないですか?

  • 1

Similar posts

    No similar posts

Are you sure? question.vm