首页 > 解决方案 > 为什么我的 tasks.loop 在 Heroku 上不起作用?

问题描述

顾名思义,每个星期三,我有一个名为的 cogwednesday从文件夹中打印特定图像。images但是,出于测试目的,我让循环每 30 秒运行一次,并且让它在今天(星期一)而不是星期三运行。我已经尝试在我的计算机上本地运行此代码,并且它没有问题。但是,在部署到 Heroku 之后,循环根本不起作用。请记住,我还有另一个 cog 也有一个tasks.loop,它每隔几秒钟就会改变我的机器人的状态。然而,这个齿轮在 Heroku 上没有任何问题。正如我之前所说,这个wednesdaycog 在我的机器上本地工作,这意味着我正在为我的机器人正确添加和加载 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文件夹中有其他图像可以很好地用于我拥有的其他命令,因为当我调用命令时机器人会发送它们。任何帮助,将不胜感激。

标签: herokudiscorddiscord.pybots

解决方案


我们需要更多的调试细节。在进行调试时,您可能会发现错误是什么。

  1. 检查requirements.txt并确保版本已锁定。(如果您通过pip freeze.
  2. 添加更多日志。cog加载时记录。当您的任务与变量的值一起重复执行时记录。打印当前工作目录的日志 ( import os; print(os.getcwd()))
  3. 检查你的机器人能到达多远。是不是一开始就失败了,没有上线?齿轮没有加载吗?是日常任务吗?是路径分辨率吗?
  4. 提供日志。不要切断原木。提供整个事情。它们可能看起来与您无关,但其他读者可能会发现一些东西。
  5. 您在那里为您的图像提供了相对路径。提供项目文件夹结构的信息。用于执行项目的命令是什么(Procfile,也可以在日志中看到。)

推荐阅读