Исправление этой ошибки: NameError (неинициализированная константа ActiveRecord:: ConnectionAdapters:: Mysql2Adapter:: столбец)

есть два приложения. Одно из приложений использует rails 4.1.2. Другое приложение использует rails 5.0.1. Вот как работает приложение rails 5: оно проверяет, вошел ли пользователь в систему:

  • если пользователь вошел в систему: тогда пользователь должен иметь возможность двигаться вперед.
  • если пользователь не вошел в систему, затем перенаправляет их в приложение rails 4 (где пользователь может войти в систему). Как только пользователь вошел в систему с приложением rails 4: пользователь должен иметь доступ к rails 5 app Нет проблем.

в настоящее время я использую следующие драгоценные камни в моем проекте Rails 5:

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

у меня тогда есть следующее в моем :

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

в настоящее время: если пользователь не logged in: затем он успешно перенаправляет пользователя. Проблема в том, когда пользователь is вход в систему. Я получаю эту ошибку, когда зарегистрированный пользователь пытается получить доступ к rails 5 app:

NameError (uninitialized constant ActiveRecord::ConnectionAdapters::Mysql2Adapter::Column)
  • Я замечаю, что приложение успешно подключается к базе данных
  • приложение также появляется для доступа к sessions таблица по первоначальному запросу (когда пользователь не вошел в систему).

любые предложения о том, что вызывает эту ошибку и как ее исправить? В конечном счете: это почти похоже на rails 5 несовместимо с activerecord-session_store и mysql2.

2 ответов


в конце концов мы смогли это выяснить.

на Marshal модуль сериализовать объекты ruby для базы данных. Он также может десериализовать материал из базы данных для воссоздания объектов.

когда вы сериализуете объект, появляется некоторая информация низкого уровня, которая идет туда же, как адаптер подключения mysql2.

когда приложение Rails 5 пытается десериализовать данные, он выдает это ошибка, потому что константа, которая существует в адаптере подключения MySql2 для Rails 4, не существует в версии Rails 5 этого адаптера.

наша работа заключалась в том, чтобы просто не хранить или извлекать какие-либо сериализованные объекты из таблицы сеансов для нашего приложения rails 5. Это помогло.

Если бы нам действительно нужно было получить сериализованные объекты из таблицы сеансов для нашего приложения rails 5: тогда, я думаю, нам пришлось бы придумать пользовательское решение.

надеюсь, что это поможет другим в будущем!


Это может быть связано с изменениями в выпуске, т. е. Rails 5.0.

А В Ruby on Rails 5.0 примечания к выпуску:

удалена поддержка устаревшего адаптера базы данных mysql из core. Большинство пользователей должны иметь возможность использовать mysql2. Он будет преобразован в отдельный драгоценный камень, когда мы найдем кого-то, чтобы поддерживать его.

устаревшие аргументы передачи в #tables-метод #tables некоторых адаптеров (mysql2, sqlite3) вернет обе таблицы и представления, в то время как другие (postgresql) просто верните таблицы. Чтобы сделать их поведение согласованным, #tables вернет только таблицы в будущем.

разница в константе, как вы описали в своем ответе, может быть вызвана тем, что они собираются изменить gem для адаптера mysql2.