【问题标题】:Rails 5.2 to 6.0 upgrade issues with migration namespacing: uninitialized constant errorsRails 5.2 到 6.0 的迁移命名空间升级问题:未初始化的常量错误
【发布时间】:2020-01-19 02:03:42
【问题描述】:

在引用 ActiveRecord 模型的迁移中遇到 NameError Exception: uninitialized constant 错误问题。控制台中不存在这些相同的问题,因此我对迁移中发生的与 Rails 控制台不同的情况感到有些困惑。

基本上,我的 ActiveRecord 模型似乎无法正确自动加载所有内容。

这是一个在控制台中运行但在迁移中引发错误的简单调用示例:

migration(byebug)> Customer.all
*** NameError Exception: uninitialized constant Customer (call 'Customer.connection' to establish a connection)::Querier
Did you mean?  Numerizer

nil

同样的调用,在控制台中,有效。

有趣的是,如果我第一次调用 确实 正确加载的另一个模型(例如,MyOtherThing.all),那么如果我下次尝试调用Customer.all 将不再引发错误。

只是有点不知道从哪里开始寻找导致这种情况的原因。谢谢!

【问题讨论】:

  • FWIW,一旦您在任何模型上调用 Model.connection,该数据库中的所有模型都将被连接。不回答您的问题,但应该解释您提出的一个问题。
  • 啊,有趣。如果我连续两次使用相同的Customer.connection('select * from customers'),则第一次在下一次工作时会引发错误。不知道那告诉我什么...
  • 不确定这是否有帮助。自从升级到 rails 6 后,我遇到了自动加载问题。有时切换到 config.autoloader = :classic 会有所帮助。切换回来不会带来问题(无论如何它会在一段时间后回来)。我们正在使用 bootsnap,我使用DISABLE_BOOTSNAP=1 运行每个命令,这给了我更大的成功率。我没有任何解决方法,也没有更好的解决方法。

标签: ruby-on-rails ruby ruby-on-rails-6


【解决方案1】:

这最终成为一个已知问题:

https://github.com/rails/rails/issues/37748

希望它会尽快修复。而且,我的部分困惑与处理 byebug 有关,这让我对导致真正错误的原因感到困惑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多