Rails 4 - Gem :: LoadError: Đã chỉ định 'mysql2' cho bộ điều hợp cơ sở dữ liệu, nhưng đá quý không được tải


150

Trong gemfile của tôi, tôi có:

gem 'mysql2'

Cơ sở dữ liệu của tôi như sau:

default: &default
  adapter: mysql2
  database: <%= ENV['db_name'] %>
  username: <%= ENV['db_user'] %>
  password: <%= ENV['db_pass'] %>
  host:     <%= ENV['db_host'] %>
  pool: 32
  socket:   <%= ENV['socket'] %>

development:
  <<: *default

production:
  <<: *default

Tôi đã chạy cả bundle updatebundle installGemfile.lock của tôi hiển thị mysql2.

Tuy nhiên, khi tôi chạy, rake db:migratetôi nhận được điều này trên cả máy tính và máy chủ dàn dựng:

myproject.com(master)$ rake db:migrate
WARNING: Use strings for Figaro configuration. 10000012508 was converted to "10000012508".
WARNING: Use strings for Figaro configuration. 860526407370038 was converted to "860526407370038".
rake aborted!
Gem::LoadError: Specified 'mysql2' for database adapter, but the gem is not loaded. Add `gem 'mysql2'` to your Gemfile (and ensure its version is at the minimum required by ActiveRecord).
.....

Chỉ cần chắc chắn rằng không có một phiên bản xấu của mysql2 hoặc một cái gì đó, tôi đã làm bundle clean --forcevà ran bundle installbundle updatemột lần nữa và khi tôi chạy gem listtôi thấy mysql2 (0.4.0)và không có các phiên bản khác.

Bất kỳ ý tưởng sẽ được đánh giá cao nhất.


GIẢI PHÁP

Hiện tại, đây là sự cố với Rails 4.1.x và 4.2.x, theo báo cáo lỗi này , nó sẽ được sửa trong bản phát hành tiếp theo của rails 4.2.x (ghi có vào dcorr trong các bình luận cho liên kết).

Trong thời gian đó, bạn có thể khắc phục bằng cách hạ cấp xuống phiên bản 0.3.18 của mysql2 bằng cách thêm dòng này vào gemfile của bạn:

gem 'mysql2', '~> 0.3.18'

1
Hãy thửbundle update mysql2
Pavan

Tôi cũng đã thử điều đó. Không hoạt động. Từ những gì tôi thấy mysql2 (0.4.0)là phiên bản đá quý ruby ​​mới nhất sẽ lấy và nó đã được cài đặt.
newUserNameHãy

12
Đây là giải pháp: gem 'mysql2', '~> 0.3.18'trong Gemfile.
newUserNameHãy

6
Đây không phải là lỗi với mysql2, đây là một vấn đề với yêu cầu trong bộ điều hợp ActiveRecord: github.com/rails/rails/issues/21544 . Điều này được cố định trong bản rails master: github.com/rails/rails/commit/
mẹo

@Pavan Maahn tuyệt vời !! _ / _
Varun

Câu trả lời:


50

Chỉ cần cập nhật thêm - giải pháp trong câu hỏi là chính xác.

Nhận xét thứ 4 đáng để lưu ý:

Đây không phải là lỗi với mysql2, đây là một vấn đề với yêu cầu trong bộ điều hợp ActiveRecord: http://github.com/rails/rails/issues/21544 . Điều này được cố định trong đường ray chính: https://github.com/rails/rails/commit/5da5e3772c32593ecf2f27b8865e81dcbe3af692

Tôi đã có thể buộc Rails 4.2.4vào 4-2-stablechi nhánh và làm cho nó hoạt động với mới nhất mysql2:

nhập mô tả hình ảnh ở đây

gem 'rails', '~> 4.2.4', git: "git://github.com/rails/rails.git", branch: '4-2-stable'
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw] #-> Rails 4.1+

#DB
gem 'mysql2'

Nếu tốc độ là ưu tiên, thì nhanh hơn một chút để giảm mysql2 xuống '0,3.20' thay vì ghim đường ray '4.2.4' vào nhánh: '4-2-ổn định'.
seanriordan08

thật khó để tin rằng đá quý mysql có quá nhiều vấn đề lỗi nghiêm trọng so với postgreQuery T__T
newBike

Đó là môi trường Windows - nó giống với Imagemagick, v.v. Bạn phải sử dụng các phụ thuộc bên ngoài và vì Windows không có repo trung tâm cho chúng, nên nó trở nên khó khăn
Richard Peck

Rails 5 thì sao?
Richard Peck

@RichardPeck Tôi gặp vấn đề này với Rails 5.0.3
garci560

67

Cứ làm đi:

gem 'mysql2', '~> 0.3.18' viên ngọc này hoạt động với rails version 4.x.x

Nếu cài đặt, gem 'mysql2', '~> 0.4.0'nó tạo ra lỗi tải đá quý và gây ra sự cố tương thích


Sạch sẽ, đơn giản và súc tích. Cảm ơn!
Am33d

Làm việc cho tôi @kaleem
khalidh

9

Vấn đề này đã được giải quyết tại đây: https://github.com/brianmario/mysql2/issues/950

Đối với Rails 4.x, vui lòng ghim đá quý vào mysql2 '~> 0.4.0' để tránh nâng cấp 0.5.x.

Đá quý:

gem 'rails', '4.2.8'
gem 'mysql2', '~> 0.4.0'

Sau đó chạy bundle update rails mysql2

Tôi hiện đang sử dụng mysql v 8.0.11


8

Câu trả lời cho câu hỏi cụ thể này liên quan đến thời điểm nó được đăng và phiên bản Rails đang được sử dụng là do sự cố xảy ra khi thực hiện bundle updatevà phiên bản mysql2 của bạn cập nhật lên 0.4.x có vấn đề không tương thích với Rails ActiveRecord mới nhất.

Một lần nữa, xin lưu ý đây KHÔNG phải là giải pháp cho những người sử dụng các phiên bản cũ hơn của Rails / ActiveRecord.

Giải pháp nhanh chóng là chỉ định mysql2phiên bản trong gemfile của bạn như sau:

gem 'mysql2', '0.3.20'

Giải pháp lâu dài là chờ đợi một bản cập nhật cho ActiveRecord hoặc một cái gì đó trong mysql2 thay đổi.


7

Nếu bạn có thể nâng cấp phiên bản đường ray của mình, thì hãy thay đổi Gemfile của bạn thành phiên bản này và nó sẽ giải quyết vấn đề mà không hạ cấp phiên bản đá quý mysql2:

gem 'rails', '4.2.6'

5

Là một người mới bắt đầu hoàn chỉnh, tôi đã bối rối về cách làm điều này vì vậy tôi mới thực hiện kiểm tra thử nghiệm và cuối cùng máy chủ của tôi hoạt động, đây là cách tôi làm cho nó hoạt động.

vào tập tin thư mục làm việc ("công việc") và từ đó vào tập tin của ứng dụng bạn đã tạo ("sample_app") đã cài đặt mysql 2 vào tập tin đá quý ("Gemfile") chỉnh sửa gem 'mysql2' thành gem 'mysql2', '~> 0,3,18'

Bây giờ hãy quay lại cmd và chạy lệnh "bundle install".

vì vậy thư mục để chỉnh sửa tệp xem xét các tệp trên trong ngoặc phải là. "c \ làm việc \ sample_app \ Gemfile"

hy vọng tôi đã được giúp đỡ.


4

Điều này thường xảy ra khi bạn thiếu một số gói mysql trên máy của bạn. Bạn có nhận được bất kỳ lỗi từ gem install mysql2? Bạn đang làm việc trên hệ điều hành nào?

Nếu trên debian hoặc ubfox thử sudo apt-get install libmysqlclient-dev.

Đồng thời đảm bảo rằng viên ngọc không được đặt trong groupcâu lệnh trong Gemfile của bạn.


+1 cho hỗ trợ. Tuy nhiên tôi đã có libmysqlclient-dev và gem không nằm trong câu lệnh nhóm. Điều kỳ lạ là nó hoạt động tốt trên các dự án khác của tôi, không phải dự án này. Ngoài ra, đây không phải là bản cài đặt mới cho HĐH của tôi. Tôi đã không thay đổi bất cứ điều gì trong môi trường của mình trong một thời gian. Và điều tương tự cũng đúng với máy chủ dàn dựng, nơi tôi cũng đang gặp vấn đề tương tự.
newUserNameHãy

1

Có vấn đề tương tự nhưng thêm source 'https://rubygems.org'vào đầu tập tin đá quý giải quyết vấn đề.

Các bước:

thêm source 'https://rubygems.org'vào tập tin đá quý của bạn. Nhận xét mysql2 gemvà thêm gem 'mysql2', '~> 0.3.18' Runbundle install


0

thử cái này:

bundle update mysql2

lệnh này sẽ cập nhật đá quý 'mysql2' của bạn lên phiên bản mới nhất (nên là 0,3,17 hoặc cao hơn) và khởi động máy chủ rails của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.