部署到Heroku的Discord Rewrite Bot运行崩溃 本地可正常启动
故障根因
你看到的NameError: name 'datetime' is not defined报错和你自己的代码没有关系,也和你新增的on_message事件逻辑无关,二者只是触发时间重合:
报错栈明确显示错误发生在discord.py库的内部文件/app/.heroku/python/lib/python3.9/site-packages/discord/abc.py中,该文件在定义SnowflakeTime类型时用到了datetime,但文件本身没有编写import datetime的导入语句,属于discord.py开发分支的代码bug。
本地运行正常是因为你本地环境安装的discord.py是更早的无bug版本,而Heroku每次部署都会拉取你requirements.txt中指定的github主分支最新代码,刚好拉到了存在导入遗漏的提交,因此触发崩溃。
解决方案
- 方案1(最推荐):固定使用稳定版discord.py,避免拉取不稳定的开发分支代码。将requirements.txt中的
git+https://github.com/Rapptz/discord.py替换为稳定版依赖,示例:
discord.py>=2.3.2 youtube_dl==2020.03.08 pynacl == 1.3.0 colorlog == 4.1.0
版本号可以替换为你本地正常运行的discord.py对应版本,保证环境一致性。
- 方案2:如果必须使用开发分支的功能,可指定拉取无bug的固定commit,将requirements.txt中的discord.py依赖修改为带commit哈希的地址即可,示例:
git+https://github.com/Rapptz/discord.py@2a3554f569362d323ad3f6f3c0d6e8b4e3a2b1c0
哈希值替换为你本地安装的discord.py对应commit即可。
额外建议
你编写的on_message事件参数命名不符合常规规范:on_message默认接收的是message对象,ctx一般用作命令上下文的命名,虽然不影响运行,但建议修改避免后续开发混淆。
内容的提问来源于stack exchange,提问作者Gamer Fardin
相关产品推荐
相关产品推荐

