discord.py bot 正确构建在 heroku 上,但显示脱机
Posted
技术标签:
【中文标题】discord.py bot 正确构建在 heroku 上,但显示脱机【英文标题】:discord.py bot properly built on heroku but shows offline 【发布时间】:2020-09-24 18:41:07 【问题描述】:在您开始提出建议之前,以下是我在 *** 上读到的内容:
-
制作
.file
类型的文件(procfile 或其他东西)并放入worker : python3.8.3 bot.py
制作一个runtime.txt并输入python-3.8.3
制作 requirements.txt 并放入
async-timeout==3.0.1
discord.py==1.3.3
(我没有做一个venv,所以我认为有用的模块我只包括了那些,它只是一个基本的机器人,代码如下)
-
我没有使用任何
.env
文件,所以我不必在 Heroku 中配置环境变量设置
最后,这是我的机器人,它在本地托管时可以工作,但不能工作(即使构建成功也不能上网)
import discord
streak1=0
client = discord.Client()
@client.event
async def on_ready():
print('We have logged in as 0.user'.format(client))
@client.event
async def on_message(message):
if message.author == client.user:
return
if message.content.startswith('$hello'):
await message.channel.send('Hello! You are '+str(message.author) +' and I am '+str(client.user))
if "$t1" in message.content:
global streak1
streak1+=1
await message.channel.send('Current Streak is'+str(streak1))
client.run('Normally i put my token here but well..')
这是我 Heroku 帐户上最近活动的图片(启用了自动部署)
---------编辑1 ----------
我删除了.file
类型的文件,而不是创建了一个没有扩展名的实际Procfile
并添加了worker : python3.8.3 bot.py
现在(成功的)构建日志是:
-----> Python app detected
-----> No change in requirements detected, installing from cache
-----> Installing SQLite3
-----> Installing requirements with pip
-----> Discovering process types
Procfile declares types -> worker
-----> Compressing...
Done: 48.7M
-----> Launching...
Released v8
https://housekeeper0.herokuapp.com/ deployed to Heroku
------编辑2----------
我关闭维护模式后的 Heroku 日志
2020-06-05T15:09:12.771374+00:00 heroku[router]: at=error code=H14 desc="No web processes running" method=GET path="/" host=housekeeper0.herokuapp.com request_id=192d5f69-baa2-45aa-87c2-e825b9b0a3e9 fwd="42.110.144.123" dyno= connect= service= status=503 bytes= protocol=https
2020-06-05T15:09:13.138611+00:00 heroku[router]: at=error code=H14 desc="No web processes running" method=GET path="/favicon.ico" host=housekeeper0.herokuapp.com request_id=2f9e9311-3a52-45c1-bd6d-e97029265ae7 fwd="42.110.128.196" dyno= connect= service= status=503 bytes= protocol=https
2020-06-05T15:09:51.000000+00:00 app[api]: Build started by user valusoutrik@gmail.com
2020-06-05T15:10:14.642049+00:00 app[api]: Release v9 created by user valusoutrik@gmail.com
2020-06-05T15:10:14.642049+00:00 app[api]: Deploy 44992c2a by user valusoutrik@gmail.com
2020-06-05T15:10:14.870453+00:00 heroku[worker.1]: State changed from crashed to starting
2020-06-05T15:10:19.063466+00:00 heroku[worker.1]: Starting process with command `: python3.8.3 bot.py`
2020-06-05T15:10:19.773065+00:00 heroku[worker.1]: State changed from starting to up
2020-06-05T15:10:22.236921+00:00 heroku[worker.1]: Process exited with status 0
2020-06-05T15:10:22.285159+00:00 heroku[worker.1]: State changed from up to crashed
2020-06-05T15:10:23.000000+00:00 app[api]: Build succeeded
2020-06-05T15:10:25.240729+00:00 heroku[router]: at=error code=H14 desc="No web processes running" method=GET path="/" host=housekeeper0.herokuapp.com request_id=08dfc489-44ce-4343-a086-6ca25655333a fwd="42.110.144.123" dyno= connect= service= status=503 bytes= protocol=https
2020-06-05T15:15:00.686869+00:00 heroku[worker.1]: State changed from crashed to starting
2020-06-05T15:15:04.221869+00:00 heroku[worker.1]: Starting process with command `: python3.8.3 bot.py`
2020-06-05T15:15:04.940175+00:00 heroku[worker.1]: State changed from starting to up
2020-06-05T15:15:07.084995+00:00 heroku[worker.1]: Process exited with status 0
2020-06-05T15:15:07.134788+00:00 heroku[worker.1]: State changed from up to crashed
---------编辑 3-------------
关于使用heroku local
我明白了
[OKAY] Loaded ENV .env File as KEY=VALUE Format
8:53:00 AM worker.1 | File "bot.py", line 7
8:53:00 AM worker.1 | async def on_ready():
8:53:00 AM worker.1 | ^
8:53:00 AM worker.1 | SyntaxError: invalid syntax
[DONE] Killing all processes with signal SIGINT
8:53:00 AM worker.1 Exited with exit code null
这在我的计算机上运行良好,无需导入异步但只需安装它,所以我将它添加到我的要求中
我目前的要求.txt
git+https://github.com/Rapptz/discord.py
async-timeout==3.0.1
asyncio==3.4.3
我还将 asyncio 导入到我的 bot.py 中
【问题讨论】:
“.file
类型的文件(pocfile 之类的)” - 这并不鼓舞人心。 Procfile
?您是否查看过 Heroku 的任何实际 日志,无论是构建(在屏幕截图中链接)还是运行?
实际上,我在这里读到一个问题,您必须提供 procfile 和 runtime.txt 或 requirements.txt ,首先我尝试使用 requirements.txt 但它没有用,所以我只是做了 procfile 并将其放入。(我只知道您不应该放入 web :
而是 worker
)。我确实检查了网站,但我该怎么办?
打开应用的结果是什么?并向我们展示日志文件。您可以使用heroku logs --tail --remote [your remote name]
登录
【参考方案1】:
你应该改变什么:
在您的Profile
文件中:
worker: python bot.py
在您的requirements.txt
:
git+https://github.com/Rapptz/discord.py
【讨论】:
我试过了,但还是不行,也许检查一下我在帖子上所做的最后一次编辑,我得到了一些关于使用heroku local
的有用信息【参考方案2】:
我认为您不应该使用 Heroku Local。
如果您在第二次编辑中查看日志,则您没有运行任何 Web 进程 Error Img。正如它所写的那样,Heroku 路由器正在向“/”路由发出 GET 请求,但那里没有任何东西可以发回响应,这会导致应用程序崩溃。一个简单的解决方法是添加 Flask。创建一个 wsgi.py 文件并添加:
from flask import Flask, Response
app = Flask(__name__)
@app.route('/', methods='GET')
def index():
status_code = Response(status=200)
return status_code
if __name__ == "__main__":
app.run(debug=True)
之后,安装 Green Unicorn(生产服务器):
pip install gunicorn
和:
pip freeze > requirements.txt
将 Gunicorn 添加到 requirements.txt。
然后,在您的工作进程上方的 Procfile 中,添加 web: gunicorn wsgi:app
这通过发回状态码响应 200 来处理 GET 请求。
否则,您可以尝试将 Web 进程缩小到 0。打开终端并导航到您的目录。在那里,使用 Heroku cli 命令heroku login
登录。登录后,运行命令
heroku ps:scale web=0
。更多关于 here.
【讨论】:
当我尝试缩小到 0(或 1(我之前尝试过))时,它会显示Scaling dynos... ! ▸ Couldn't find that process type (web).
。我现在要试试 wsgi.py
尝试使用那个 wsgi 但没有得到任何日志(机器人也没有上线)【参考方案3】:
从这个问题H14 error in heroku - "no web processes running" 我试图缩放web
dyno
但后来它击中了我,我应该扩大工人测功机
而不是
heroku ps:scale web=1 --app [my app name]
我这样做了
heroku ps:scale worker=1 --app [my app name]
它就像一个魅力!
【讨论】:
以上是关于discord.py bot 正确构建在 heroku 上,但显示脱机的主要内容,如果未能解决你的问题,请参考以下文章
Heroku Discord Bot 构建但在部署时无法工作