Rails 控制台在从特定模型获取记录时出现生产时出现莫名其妙的错误

Rails console with inexplicable error on production on fetching a record from a specific model

提问人:mansoor.khan 提问时间:11/10/2023 最后编辑:mansoor.khan 更新时间:11/11/2023 访问量:80

问:

我在 Rails 控制台的生产中遇到了这个奇怪的问题:,其中尝试获取用户:会导致以下错误:rails c -e productionUser.first

2.7.2 :005 > User.first
Traceback (most recent call last):
ArgumentError (wrong number of arguments (given 0, expected 1))

从这个错误中什么也看不出来。出于某种原因,它只发生在这个用户模型上,对于其余的模型,一切正常。

此外,在开发或生产模式下,此错误不会在本地出现。

此处附上用户模型,供参考:

# frozen_string_literal: true

class User < ApplicationRecord
  devise :database_authenticatable,
         :registerable,
         :recoverable,
         :rememberable,
         :trackable,
         :confirmable,
         :omniauthable,
         :validatable

 ....
end

任何解决此问题的指针将不胜感激。

更新

经过进一步的调查和 chatGPT 的一些帮助,我认为设计方法导致了错误。删除它后,一切正常。database_authenticable

现在我需要弄清楚为什么该方法会引发错误。

Ruby-on-Rails 轨道控制台

评论

0赞 zaphodbln_ 11/10/2023
第一个用户中有什么特殊数据吗?
0赞 Vincent Rolea 11/10/2023
您是否有机会对错误进行更详细的跟踪?根据经验,似乎某处的某些代码覆盖了 User#first。您是否在代码库中的某个位置打开 User 类?
0赞 mansoor.khan 11/10/2023
@zaphodbln_ 它甚至不适用于find_by或第一个用户以外的其他用户。
0赞 mansoor.khan 11/10/2023
@VincentRolea 它甚至不适用于find_by或第一个用户以外的其他用户。此外,除了问题中提到的错误之外,我无法获得任何痕迹。即使尝试捕获异常也不会返回任何有用的东西。
1赞 dbugger 11/10/2023
有大量的验证和关联 - 我会首先将它们注释掉,看看问题是否仍然存在。如果是这样,则代码库中有其他内容导致了问题。如果这样可以解决问题,请开始重新添加验证和关联,直到找到导致问题的验证和关联。

答:

3赞 mansoor.khan 11/11/2023 #1

好吧,所以问题是该模块有一个名为的方法,该方法接受参数并使用 bcrypt 对密码进行哈希处理。database_authenticablepassword_digest

现在,我在数据库中有一个现有列,这是我之前使用的 ActiveRecords 所必需的。 因此,该方法在没有参数的情况下被调用,因此抛出错误: .password_digesthas_secure_passwordArgumentError (wrong number of arguments (given 0, expected 1))

我进行了迁移以删除该列,但显然它在某个时间点失败了,我不得不删除该列才能使事情正常工作。password_digest

我希望它能帮助任何面临类似问题的人。

评论

1赞 Vincent Rolea 11/13/2023
很高兴您能够解决这个问题!这是一个毛茸茸的!
0赞 mansoor.khan 11/15/2023
确实如此!如果没有社区的帮助,我将无法弄清楚。感谢所有参与其中的人。