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 构建但在部署时无法工作

如何制作随机反应游戏(discord.py)

@bot.event 在一个 cog discord.py

Discord bot 运行命令两次 discord.py

Discord Bot 响应短语(Discord.py 重写)

Discord Bot 不播放声音 - Discord.py