【发布时间】: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