修复此错误:NameError(未初始化的常量ActiveRecord :: ConnectionAdapters :: Mysql2Adapter :: Column)

Nei*_*eil 11 activerecord ruby-on-rails mysql2

有两个应用程序.其中一个应用程序使用rails 4.1.2.另一个应用程序正在使用rails 5.0.1.以下是rails 5 app的工作原理:它检查用户是否已登录:

  • 如果用户已登录:则用户应该能够继续前进.
  • 如果用户登录,那么它们重定向到钢轨4的应用程序(这是用户可以登录).一旦用户使用rails 4 app登录:用户应该能够访问rails 5 app没问题.

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

gem 'mysql2', '~> 0.4.4'
gem 'activerecord-session_store', '~> 1.0'
Run Code Online (Sandbox Code Playgroud)

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

Rails.application.config.session_store :active_record_store, :key => ‘SOME_KEY’
Run Code Online (Sandbox Code Playgroud)

当前位置:如果用户没有登录:那么它成功地将用户重定向.问题是,当用户正在登录我得到这个错误时登录的用户试图访问导轨5应用程序:

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

有关触发此错误的内容以及如何解决此问题的任何建议?最终:它几乎看起来好像rails 5activerecord-session_store和不相容mysql2.

Nei*_*eil 6

我们最终能够弄明白.

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

序列化对象时,似乎还有一些低级别信息,如mysql2连接适配器.

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

我们的工作是不要在rails 5应用程序的会话表中存储或检索任何序列化对象.这就是诀窍.

如果我们确实需要从rails 5应用程序的会话表中检索序列化对象:那么我认为我们必须提出自定义解决方案.

希望这有助于未来的其他人!