Python脚本可以在本地机器上运行,但不能在谷歌云函数上运行



我的功能已成功部署在GCF上,但不起作用:


import requests
from telegram.ext import CommandHandler, CallbackQueryHandler, Filters, MessageHandler, Updater, CallbackContext
from telegram import Update
import logging
import os
import re

# Setup Logger
logger = logging.getLogger()
logger.setLevel(logging.INFO)
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO)
logger = logging.getLogger(__name__)
# Constants
NEWS_ENDPOINT = f"https://newsapi.org/v2/everything"

API_KEY = os.environ.get('NEWS_API_KEY')
TOKEN = os.environ.get('TOKEN')
# Setup Webhook
WEBHOOK = os.environ.get('WEBHOOK')
# Setup PORT
PORT = int(os.environ.get('PORT', '443'))

def main():
updater = Updater(token=TOKEN, use_context=True)
dispatcher = updater.dispatcher
# Adding commands
dispatcher.add_handler(CommandHandler("about", about_command))
dispatcher.add_handler(CommandHandler("get", get_articles))
dispatcher.add_handler(CommandHandler("start", get_articles))
dispatcher.add_handler(CommandHandler("keywords", keywords))
dispatcher.add_handler(MessageHandler(Filters.command, unknown_command))
# Toggle between polling and webhook based on env file
MODE = os.environ.get("MODE", "WEBHOOK")
if MODE == "polling":
logging.info("Polling mode")
updater.start_polling()
else:
logging.info("Webhook mode")
updater.start_webhook(listen="0.0.0.0",
port=PORT,
url_path=TOKEN,
webhook_url=WEBHOOK)
# updater.bot.setWebhook(WEBHOOK + TOKEN)
# Run the bot until you press Ctrl-C or the process receives SIGINT,
# SIGTERM or SIGABRT.
updater.idle()
if __name__ == '__main__':
from dotenv import load_dotenv
load_dotenv()
main()

Traceback(最后一次调用(:File"/layers/google.python.pip/pip/lib/python3.8/site packages/sflak/app.py";,第2447行,在wsgi_app response=self.full_dispatch_request((File"/layers/google.python.pip/pip/lib/python3.8/site packages/sflak/app.py";,行1952,在full_dispatch_request rv=self.handle_user_exception(e(File"/layers/google.python.pip/pip/lib/python3.8/site packages/sflak/app.py";,行1821,在handle_user_exception reraise(exc_type,exc_value,tb(File"/layers/google.python.pip/pip/lib/python3.8/site packages/sflak/compat.py";,第39行/layers/google.python.pip/pip/lib/python3.8/site packages/sflak/app.py";,第1950行,在full_dispatch_request rv=self.dispatch-request((File"/layers/google.python.pip/pip/lib/python3.8/site packages/sflak/app.py";,第1936行,在dispatch_request return self.view_functionsrule.endpoint File"/layers/google.python.pip/pip/lib/python3.8/site packages/functions_framework/init.py";,第67行,在view_func返回函数(request.get_current_object(((中类型错误:main((接受0个位置参数,但1个已给定

我不知道为什么会给出一个位置论证我最好的猜测是GCF引用main.py作为一个类,所以self被传递给main?但我该如何克服呢?

您必须遵守Cloud Functions方法Signature,并在部署过程中设置正确的入口点。

#In your script
def hello_http(request):
...
...

# When you deploy
gcloud functions deploy --entry-point=hello_http ........

有关更多详细信息,请参阅快速入门指南

相关内容

最新更新