2017-02-17 17 views
11

Có hai ứng dụng. Một trong những ứng dụng đang sử dụng đường ray 4.1.2. Ứng dụng khác đang sử dụng đường ray 5.0.1. Đây là cách hoạt động của ứng dụng rails 5: nó kiểm tra xem người dùng đã đăng nhập chưa:Sửa Lỗi này: NameError (hằng số không khởi tạo ActiveRecord :: ConnectionAdapters :: Mysql2Adapter :: Column)

  • Nếu người dùng đăng nhập: thì người dùng có thể tiếp tục.
  • Nếu người dùng là NOT đăng nhập, sau đó nó chuyển hướng họ đến ứng dụng đường ray 4 (là nơi người dùng có thể đăng nhập). Sau khi người dùng đăng nhập bằng ứng dụng đường ray 4: người dùng sẽ có thể truy cập ứng dụng đường ray 5 không có vấn đề gì.

Tôi hiện đang sử dụng đá quý sau trong Rails của tôi 5 dự án:

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

sau đó tôi có sau trong config/initializers/session_store.rb tập tin của tôi:

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

Hiện nay: nếu người dùng là không phải đã đăng nhập: khi đó nó chuyển hướng thành công người dùng. Vấn đề là khi người dùng được đăng nhập tôi nhận được lỗi này khi đăng nhập người dùng cố gắng truy cập vào các đường ray 5 ứng dụng:.

NameError (uninitialized constant ActiveRecord::ConnectionAdapters::Mysql2Adapter::Column) 
  • tôi nhận thấy rằng các ứng dụng được thành công kết nối với cơ sở dữ liệu
  • Ứng dụng cũng xuất hiện để truy cập bảng sessions theo yêu cầu ban đầu (khi người dùng chưa đăng nhập).

Bất kỳ đề xuất nào về những gì đang kích hoạt lỗi này và cách sửa lỗi? Cuối cùng: nó gần như xuất hiện như thể rails 5 không tương thích với activerecord-session_storemysql2.

+0

Phải có thêm thông tin trong các dòng trước hoặc sau lỗi về nơi bắt nguồn. – Iceman

+0

@Iceman Thật không may: chỉ có dấu vết ngăn xếp. Đây là dòng cuối cùng: 'activesupport (5.0.1) lib/active_support/inflector/methods.rb: 270: trong' const_get'' – Neil

+0

Hãy xem kỹ hơn, phải có một số mã mà bạn đang gọi cho người dùng đã đăng nhập tạo lỗi này. – Iceman

Trả lời

6

Cuối cùng, chúng tôi có thể tìm ra.

Mô hình Marshal có thể nối tiếp đối tượng ruby ​​vào cơ sở dữ liệu. Nó cũng có thể deserialize nội dung từ cơ sở dữ liệu để tạo lại các đối tượng.

Khi bạn tuần tự hóa một đối tượng, có vẻ như có một số thông tin cấp thấp đi vào đó, như bộ kết nối mysql2.

Khi ứng dụng Rails 5 cố gắng deserialize dữ liệu, nó ném lỗi này vì hằng số tồn tại trong bộ kết nối MySql2 cho Rails 4 không tồn tại trong phiên bản Rails 5 của bộ điều hợp đó.

Công việc của chúng tôi xung quanh là không lưu trữ hoặc truy xuất bất kỳ đối tượng được tuần tự hóa nào từ bảng phiên cho ứng dụng đường ray 5 của chúng tôi. Điều đó đã làm các trick.

Nếu chúng tôi thực sự cần thiết để truy xuất các đối tượng được tuần tự hóa từ bảng phiên cho ứng dụng đường ray 5 của chúng tôi: thì tôi nghĩ chúng tôi sẽ phải đưa ra giải pháp tùy chỉnh.

Hy vọng điều này sẽ giúp người khác trong tương lai!

4

Có thể là do những thay đổi trong bản phát hành, tức là Rails 5.0.

Như Trong Ruby on Rails 5.0 Release Notes:

Removed hỗ trợ cho adapter cơ sở dữ liệu di sản mysql từ cốt lõi. Hầu hết người dùng sẽ có thể sử dụng mysql2. Nó sẽ được chuyển đổi thành một viên ngọc riêng biệt khi chúng ta tìm thấy ai đó để duy trì nó.

Đối số truyền không được chấp nhận cho #tables - phương thứC#tables của một số bộ điều hợp (mysql2, sqlite3) sẽ trả lại cả bảng và chế độ xem trong khi những người khác (postgresql) chỉ trả lại bảng. Để làm cho hành vi của chúng nhất quán, #tables sẽ chỉ trả về các bảng trong tương lai.

Sự khác biệt về hằng số như bạn mô tả trong câu trả lời có thể là do họ sẽ thay đổi đá quý cho bộ điều hợp mysql2.

Các vấn đề liên quan