【问题标题】:Hosting python-telegram-bot on Heroku always Conflict after a few seconds在 Heroku 上托管 python-telegram-bot 总是在几秒钟后发生冲突
【发布时间】:2020-08-08 07:12:08
【问题描述】:

我使用python-telegram-bot 设置了一个电报机器人,我想将它托管在 Heroku 上。问题是服务器代码总是出错,声称有另一个机器人实例正在运行(没有)。

我像这样创建了一个Procfile

web: python main.py

并确保requirements.txt 是最新的。

main.py:

# ... handlers ...

updater = Updater(token=os.environ['TOKEN'], use_context=True)
dispatcher = updater.dispatcher
logging.basicConfig(format='%(asctime)s  %(name)s - %(levelname)s - %(message)s',
                    level=logging.INFO)

dispatcher.add_handler(CommandHandler('help', help))


print('Started Bot. Listening for messages...')
updater.start_polling()
updater.idle()

这是错误日志:

2020-04-24T16:20:34.096562+00:00 app[web.1]: 2020-04-24 16:20:34,095  telegram.ext.dispatcher - ERROR - No error handlers are registered, logging exception.

2020-04-24T16:20:34.096564+00:00 app[web.1]: Traceback (most recent call last):
2020-04-24T16:20:34.096564+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/telegram/ext/updater.py", line 380, in _network_loop_retry
2020-04-24T16:20:34.096565+00:00 app[web.1]:     if not action_cb():
2020-04-24T16:20:34.096565+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/telegram/ext/updater.py", line 341, in polling_action_cb
2020-04-24T16:20:34.096609+00:00 app[web.1]:     allowed_updates=allowed_updates)
2020-04-24T16:20:34.096610+00:00 app[web.1]:   File "<decorator-gen-31>", line 2, in get_updates
2020-04-24T16:20:34.096610+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/telegram/bot.py", line 70, in decorator
2020-04-24T16:20:34.096611+00:00 app[web.1]:     result = func(*args, **kwargs)
2020-04-24T16:20:34.096611+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/telegram/bot.py", line 2136, in get_updates
2020-04-24T16:20:34.096612+00:00 app[web.1]:     result = self._request.post(url, data, timeout=float(read_latency) + float(timeout))
2020-04-24T16:20:34.096612+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/telegram/utils/request.py", line 334, in post
2020-04-24T16:20:34.096612+00:00 app[web.1]:     **urlopen_kwargs)
2020-04-24T16:20:34.096613+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/telegram/utils/request.py", line 249, in _request_wrapper
2020-04-24T16:20:34.096613+00:00 app[web.1]:     raise Conflict(message)
2020-04-24T16:20:34.096946+00:00 app[web.1]: telegram.error.Conflict: Conflict: terminated by other getUpdates request; make sure that only one bot instance is running
2020-04-24T16:20:34.523514+00:00 heroku[web.1]: State changed from starting to crashed

我确保停止任何其他正在运行的main.py

那么我如何在 Heroku 上正确托管 bot 实例?

【问题讨论】:

  • 我有一个替代解决方案是使用 webhooks:github.com/python-telegram-bot/python-telegram-bot/wiki/… 但是当 bot 实例存在于 heroku 中,并且有人使用 updater.start_polling 启动本地服务器时,heroku 的 bot 实例停止侦听直到另一个重新部署。我仍在寻找原始问题的答案。

标签: python python-3.x heroku bots python-telegram-bot


【解决方案1】:

尝试改用“web”-“worker”。 这是我在 heroku 上的机器人的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-26
    • 2020-10-26
    • 2022-01-26
    • 2021-11-10
    • 2013-05-25
    • 2017-05-31
    • 2021-11-20
    • 2022-10-06
    相关资源
    最近更新 更多