Rake任务中访问post值的异常行为

这可能是由于对 Ruby(ActiveRecord?)与 Rails 如何交互数据库存在误解,我在运行 rake 任务时看到了一个不寻常的错误信息。

该错误信息会重复若干次,每次对应不同的帖子 ID,类似如下:

Failed to refresh post (topic_id: , post_id: 46367)

该错误信息来自 rake 任务 posts:refresh_emails 中的这一行:

触发此错误的每个帖子的一个共同点是:它们都属于已被删除的主题。对它们执行操作失败并不完全意外,但令我感到奇怪的是,在 Rails 中查询该帖子 ID 时,我发现它确实设置了 topic_id,而上述 puts 行却无法获取该值。

[1] pry(main)> Post.where(id: 46367)
=> [#<Post:0x000055e95558ad10
  id: 46367,
  user_id: 3372,
  topic_id: 4225,
  ...
  raw_email:
   "<some valid raw email>",
  ...

我粗略浏览了代码,唯一能解释为何会抛出错误并打印该信息的明显原因是:如果它也无法在第 290 行获取 raw_email,这将导致 Email::Receiver 在初始化时抛出异常。

这可能是由于不熟悉 Ruby,或者没有深入挖掘 revise() 方法,但实际上可能还有其他地方会因其他原因抛出异常。

无论如何,我有点困惑为什么这些帖子会失败。看起来这个 rake 任务应该能够处理那些恰好属于已删除主题的帖子,包括首帖。尤其是考虑到工作人员可能会在未意识到存在此类任务的情况下恢复主题,更不用说该任务并未应用于该特定主题了。

在我的情况下,我不需要对已删除的主题执行任何操作,而且我知道它们不会被恢复,因此我并不寻求解决方案,只是希望将此情况告知相关人员。这可能是一个问题,也可能什么都不是。