【问题标题】:Fixing this Error: NameError (uninitialized constant ActiveRecord::ConnectionAdapters::Mysql2Adapter::Column)修复此错误:NameError(未初始化的常量 ActiveRecord::ConnectionAdapters::Mysql2Adapter::Column)
【发布时间】:2017-07-07 11:49:55
【问题描述】:

有两个应用程序。其中一个应用程序正在使用 rails 4.1.2。另一个应用程序正在使用 rails 5.0.1。这是 rails 5 应用程序的工作方式:它检查用户是否已登录:

  • 如果用户已登录:那么用户应该能够继续前进。
  • 如果用户登录,则它会将他们重定向到 rails 4 应用程序(用户可以登录的地方)。一旦用户使用 rails 4 应用程序登录:用户应该能够访问 rails 5 应用程序没有问题。

我目前在我的 Rails 5 项目中使用以下 gem:

gem 'mysql2', '~> 0.4.4'
gem 'activerecord-session_store', '~> 1.0'

然后我的config/initializers/session_store.rb 文件中有以下内容:

Rails.application.config.session_store :active_record_store, :key => ‘SOME_KEY’

当前:如果用户没有登录:那么它成功地重定向了用户。问题是当用户 登录时。当登录用户尝试访问 rails 5 应用程序时出现此错误:

NameError (uninitialized constant ActiveRecord::ConnectionAdapters::Mysql2Adapter::Column)
  • 我注意到应用程序已成功连接到数据库
  • 该应用似乎还可以在初始请求时访问sessions 表(当用户未登录时)。

关于触发此错误的原因以及如何修复它有什么建议吗?最终:似乎rails 5activerecord-session_storemysql2 不兼容。

【问题讨论】:

  • 在错误之前或之后的行中必须有更多信息,说明它的来源。
  • @Iceman 不幸的是:只有堆栈跟踪。这是最后一行:activesupport (5.0.1) lib/active_support/inflector/methods.rb:270:in const_get'`
  • 仔细看一下,里面一定有一些代码是你调用的登录用户产生这个错误的代码。

标签: ruby-on-rails activerecord mysql2


【解决方案1】:

我们最终能够弄清楚。

Marshal 模块可以序列化 ruby​​ 对象到数据库。它还可以反序列化数据库中的内容以重新创建对象。

当您序列化一个对象时,那里似乎也有一些低级信息,例如 mysql2 连接适配器。

当 Rails 5 应用程序尝试反序列化数据时,它会抛出此错误,因为 Rails 4 的 MySql2 连接适配器中存在的常量在该适配器的 Rails 5 版本中不存在。

我们的解决方法是不为我们的 rails 5 应用程序存储或检索会话表中的任何序列化对象。那成功了。

如果我们真的需要从我们的 rails 5 应用程序的会话表中检索序列化对象:那么我认为我们将不得不提出一个自定义解决方案。

希望这对将来的其他人有所帮助!

【讨论】:

    【解决方案2】:

    这可能是由于版本的变化,即 Rails 5.0。

    Ruby on Rails 5.0 Release Notes:

    从核心中删除了对旧版 mysql 数据库适配器的支持。大多数用户应该能够使用mysql2。当我们找到人来维护它时,它将被转换为单独的 gem。

    不推荐将参数传递给#tables - 一些适配器(mysql2、sqlite3)的#tables 方法将返回表和视图,而其他适配器(postgresql)只返回表。为了使它们的行为保持一致,#tables 将来将只返回表。

    您在回答中描述的常数差异可能是由于他们将为 mysql2 适配器更改 gem。

    【讨论】:

      猜你喜欢
      • 2016-09-15
      • 2015-02-24
      • 2020-10-13
      • 2023-03-31
      • 2013-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-26
      相关资源
      最近更新 更多