MongoDB Atlas 连接在 Heroku 上不起作用

MongoDB Atlas connection doesn't work on Heroku

我正在为 servers.I 创建一个 discord.py 机器人,正在寻找免费的 VPS,我找到了一个 Heroku。我学会了如何使用它,并托管了我的另一个机器人几个小时。然后我使用 MongoDB Atlas 数据库创建了另一个机器人。问题是,当我想使用必须使用数据库的命令时,它不起作用并且会发送错误。其他命令有效

我做了一些研究,但在某些论坛上,他们说不提供您的信用卡详细信息是不可能的,有些人说这是可能的,但没有说明如何。

这是我从 heroku 日志中得到的错误:

Traceback (most recent call last):
2019-07-25T19:08:37.808124+00:00 app[worker.1]:   File "/app/.heroku/python/lib/python3.7/site-packages/discord/ext/commands/bot.py", line 863, in invoke
2019-07-25T19:08:37.808126+00:00 app[worker.1]:     await ctx.command.invoke(ctx)
2019-07-25T19:08:37.808132+00:00 app[worker.1]:   File "/app/.heroku/python/lib/python3.7/site-packages/discord/ext/commands/core.py", line 728, in invoke
2019-07-25T19:08:37.808133+00:00 app[worker.1]:     await injected(*ctx.args, **ctx.kwargs)
2019-07-25T19:08:37.808134+00:00 app[worker.1]:   File "/app/.heroku/python/lib/python3.7/site-packages/discord/ext/commands/core.py", line 88, in wrapped
2019-07-25T19:08:37.808136+00:00 app[worker.1]:     raise CommandInvokeError(exc) from exc
2019-07-25T19:08:37.808165+00:00 app[worker.1]: discord.ext.commands.errors.CommandInvokeError: Command raised an exception: ServerSelectionTimeoutError: connection closed,connection closed,connection closed

这很可能是 SSL 证书错误。您可以在托管数据库时设置自己的 ssl_certfile 选项 - 您可以找到与该 here.

相关的文档

如果不是这种情况,我建议您查看您的服务器日志文件并检查那里的错误。

希望对您有所帮助!

我知道您找到了 Heroku,我个人会使用 repl.it,因为它不需要任何钱,运行时间长,支持出色。与 Heroku 不同,您可以 运行 机器人使用很长时间。

如果您不喜欢切换,您是否在 requirements.txt 中使用了 pymongo

如果您只将本地 IP 列入白名单,则可能会出现此问题。一个牺牲安全性的简单解决方法是将 MongoDB Atlas 集群中的任何 IP (0.0.0.0/0) 列入白名单。或者您可以使用 VPC 对等互连。