错误 R10 - Web 进程在启动后 60 秒内未能绑定到 $PORT
Posted
技术标签:
【中文标题】错误 R10 - Web 进程在启动后 60 秒内未能绑定到 $PORT【英文标题】:Error R10 - Web process failed to bind to $PORT within 60 seconds of launch 【发布时间】:2019-04-20 13:50:37 【问题描述】:我正在用 Python 构建一个 Telegram 机器人,它根据命令获取组织的 Github 存储库的星星并显示它们。
机器人运行并显示欢迎消息,但不响应任何命令,然后崩溃并给出错误,
错误 R10(启动超时)-> Web 进程未能在启动后 60 秒内绑定到 $PORT 2018-11-17T17:13:40.232216+00:00
heroku[web.1]:使用 SIGKILL 停止进程
2018-11-17T17:13:40.309943+00:00 heroku[web.1]:进程退出 状态 137
2018-11-17T17:13:40.370462+00:00 heroku[web.1]: 状态 从开始变成崩溃了
2018-11-17T17:13:41.899621+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=gcijbossbot.herokuapp.com request_id= 4cf3c8f0-940b-4c73-aee7-842b1949e395 fwd="115.97.36.250" dyno= connect= service= status=503 bytes= protocol=https
2018-11-17T17:13:44.029680+00:00 heroku[路由器]: at=error code=H10 desc="应用程序崩溃" 方法=GET path="/favicon.ico" 主机=gcijbossbot.herokuapp.com request_id=94937fe2-56d2-4f4c-bad9-1fe679442db4 fwd="115.97.36.250" dyno=连接=服务=状态=503字节=协议=https
我尝试从
切换 Procfileweb: python Stars.py
到
worker: python Stars.py
但是应用程序根本无法运行。
Stars.py 代码:
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
import requests
def start(bot, update):
update.message.reply_text('Ahoy ! Welcome to JBossStarsBot. \n\nTo get started, use the /stars command to fetch the stars from the GitHub repos of JBoss'.format(update.message.from_user.first_name))
def stars(bot, update):
api = requests.get('https://api.github.com/orgs/JBossOutreach/repos')
json = api.json()
stars = ''
for i in range(len(json)):
stars = stars + '\n' + res[i]['name'] + ' : ' + str(res[i]['stargazers_count'])
update.message.reply_text('Here\'s the list of all the JBoss repositories on GitHub along with their respective star count. \n\n' + stars + '\n\nTo get the stars of a specific repository, enter the name of the repository.')
def repo_stars(bot, update):
api = requests.get('https://api.github.com/orgs/JBossOutreach')
json = api.json()
star = ''
for i in range(len(json)):
cur = res[i]['name']
if cur == update.message.text:
star = star + cur + ' : ' + str(res[i]['stargazers_count'])
if cur == '':
star = 'No such repository found.'
bot.send_message(update.message.chat_id, star)
def main():
updater = Updater(token)
dp = updater.dispatcher
dp.add_handler(CommandHandler('start', start))
dp.add_handler(CommandHandler('stars', stars))
dp.add_handler(MessageHandler(Filters.text, repo_stars))
updater.start_polling()
updater.idle()
if __name__ == '__main__':
main()
我没有使用过 Django 或 Flask。只需 python-telegram-bot 和请求。
【问题讨论】:
您的应用提供网络服务吗?它是否侦听 HTTP 请求并以 HTTP 响应进行响应?这就是 Heroku 的用途。如果您的代码不这样做,那就不合适了。 是的。这是一个电报机器人。 好的,那么Stars.py
中有什么内容?你如何设置你的服务器来监听?我们无法帮助我们看不到的代码。
这里是代码:github.com/arihantbansal/JBossTelegramStarsBot
关于 Stack Overflow 的问题必须是独立的。我们不会去异地挖掘您的存储库来查找问题。请以minimal reproducible example 的形式发布相关部分此处。
【参考方案1】:
我不熟悉 Telegram,但看起来您实际上并没有运行 HTTP 服务器。相反,您的代码是 periodically polling for updates:
更新程序可以作为轮询服务启动,或者在生产环境中使用 webhook 来接收更新。
在 Heroku 上,您需要运行一个实际的 HTTP 服务器,绑定到由 PORT
环境变量提供的端口。看起来start_webhook
可以做到这一点,例如像
import os
def main():
# ...
port = os.getenv('PORT', default=8000)
updater.start_webhook(port=port)
【讨论】:
以上是关于错误 R10 - Web 进程在启动后 60 秒内未能绑定到 $PORT的主要内容,如果未能解决你的问题,请参考以下文章
在 python 上获取“错误 R10(启动超时)-> Web 进程未能在启动后 60 秒内绑定到 $PORT”
错误 R10(启动超时)-> Web 进程未能在启动后 60 秒内绑定到 $PORT - HEROKU ERROR
Heroku discord bot 托管错误 R10(启动超时)-> Web 进程在启动后 60 秒内无法绑定到 $PORT
Heroku Node.js 错误 R10(启动超时)-> Web 进程在启动后 60 秒内无法绑定到 $PORT