heroku - 为什么我的 tasks.loop 在 Heroku 上不起作用?
问题描述
顾名思义,每个星期三,我有一个名为的 cogwednesday
从文件夹中打印特定图像。images
但是,出于测试目的,我让循环每 30 秒运行一次,并且让它在今天(星期一)而不是星期三运行。我已经尝试在我的计算机上本地运行此代码,并且它没有问题。但是,在部署到 Heroku 之后,循环根本不起作用。请记住,我还有另一个 cog 也有一个tasks.loop
,它每隔几秒钟就会改变我的机器人的状态。然而,这个齿轮在 Heroku 上没有任何问题。正如我之前所说,这个wednesday
cog 在我的机器上本地工作,这意味着我正在为我的机器人正确添加和加载 cog,并执行代码运行所需的其他事情。所以,
import discord, datetime
from discord.ext import commands, tasks
import json
with open('config.json') as f:
config = json.load(f)
class wednesday(commands.Cog):
def __init__(self, bot):
self.bot = bot
@tasks.loop(seconds=30)
async def time_checker(self):
self.time = datetime.datetime.now
if self.time().hour == 19:
if datetime.datetime.today().weekday() == 0: # 0 because I'm testing today which is a Monday
self.channel = await self.bot.fetch_channel(config['id'])
await self.channel.send(file=discord.File('images/wednesday_pic.png'))
@commands.Cog.listener()
async def on_ready(self):
await self.bot.wait_until_ready()
self.time_checker.start()
def setup(bot):
bot.add_cog(wednesday(bot))
我不确定为什么会这样:我认为这可能与循环有关。我在images
文件夹中有其他图像可以很好地用于我拥有的其他命令,因为当我调用命令时机器人会发送它们。任何帮助,将不胜感激。
解决方案
我们需要更多的调试细节。在进行调试时,您可能会发现错误是什么。
- 检查
requirements.txt
并确保版本已锁定。(如果您通过pip freeze
. - 添加更多日志。
cog
加载时记录。当您的任务与变量的值一起重复执行时记录。打印当前工作目录的日志 (import os; print(os.getcwd())
) - 检查你的机器人能到达多远。是不是一开始就失败了,没有上线?齿轮没有加载吗?是日常任务吗?是路径分辨率吗?
- 提供日志。不要切断原木。提供整个事情。它们可能看起来与您无关,但其他读者可能会发现一些东西。
- 您在那里为您的图像提供了相对路径。提供项目文件夹结构的信息。用于执行项目的命令是什么(
Procfile
,也可以在日志中看到。)
推荐阅读
- java - Vertx Hazelcast 集群错误“没有要创建的发现策略工厂...”使用 AWS 加入策略时
- python - 如何找到号码。来自以下代码的特定国家/地区的人?
- c++ - 在向量问题的向量中擦除对象
- c# - Unity如何获取Compoent
() & 获取组件 () 与游戏对象 - python - 通过搜索用户名从文件中获取密码并将该密码存储在变量中
- javascript - 在选定下拉列表的两个值之间计算?
- javascript - 重新编译 build.py 文件时缺少 goog.date 提供程序 - google blockly
- sql - 更改参考数据库表的输入值
- angular - 为什么从父组件发出后子组件中的值没有改变?
- laravel - 在刀片(Laravel)中显示来自其他模型的属性