Rails 4 - Gem :: LoadError: Ditentukan 'mysql2' untuk adaptor basis data, tetapi permata tidak dimuat

150

Dalam permata saya, saya punya:

gem 'mysql2'

Database.yml saya adalah sebagai berikut:

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

Saya sudah menjalankan keduanya bundle updatedan bundle installdan Gemfile.lock saya menunjukkan mysql2.

Namun ketika saya menjalankan rake db:migratesaya mendapatkan ini di komputer saya dan di server staging:

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).
.....

Hanya untuk memastikan tidak ada versi mysql2 yang buruk atau sesuatu, saya melakukannya bundle clean --forcedan berlari bundle installdan bundle updatelagi dan ketika saya menjalankan gem listsaya melihat mysql2 (0.4.0)dan tidak ada versi lain.

Setiap ide akan sangat dihargai.


LARUTAN

Saat ini masalah dengan Rails 4.1.x dan 4.2.x, per laporan bug ini , akan diperbaiki pada rilis berikutnya dari rails 4.2.x (kredit untuk dcorr di komentar untuk tautan).

Sementara itu, Anda dapat memperbaikinya dengan melakukan penurunan ke versi 0.3.18 dari mysql2 dengan menambahkan baris ini ke gemfile Anda:

gem 'mysql2', '~> 0.3.18'
newUserNameHere
sumber
1
Cobabundle update mysql2
Pavan
Saya sudah mencobanya juga. Tidak bekerja Dari apa yang saya lihat mysql2 (0.4.0)adalah permata ruby ​​versi terbaru akan diambil dan sudah terpasang.
newUserNameHere
12
Inilah solusinya: gem 'mysql2', '~> 0.3.18'di Gemfile.
newUserNameHere
6
Ini bukan bug dengan mysql2, ini masalah dengan persyaratan dalam adaptor ActiveRecord: github.com/rails/rails/issues/21544 . Ini diperbaiki di master rail: github.com/rails/rails/commit/…
dcorr
@Pavan Awsome maahn !! _ / _
Varun

Jawaban:

50

Hanya pembaruan lebih lanjut - solusi dalam pertanyaan sudah benar.

Komentar ke-4 patut dicatat:

Ini bukan bug dengan mysql2, ini masalah dengan persyaratan dalam adaptor ActiveRecord: http://github.com/rails/rails/issues/21544 . Ini diperbaiki di master rel: https://github.com/rails/rails/commit/5da5e3772c32593ecf2f27b8865e81dcbe3af692

Saya dapat mengikat Rails 4.2.4ke 4-2-stablecabang dan membuatnya bekerja dengan yang terbaru mysql2:

masukkan deskripsi gambar di sini

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'
Richard Peck
sumber
Jika kecepatan adalah prioritas, itu sedikit lebih cepat untuk menabrak mysql2 ke '0,3.20' daripada menyematkan rel '4.2.4' ke cabang: '4-2-stable'.
seanriordan08
sulit untuk percaya bahwa permata mysql memiliki begitu banyak masalah pelit kereta dibandingkan dengan postgreSQL T__T
newBike
Ini adalah lingkungan Windows - itu sama dengan Imagemagick dll. Anda harus menggunakan dependensi eksternal, dan karena Windows tidak memiliki repo pusat untuk mereka, itu menjadi rumit
Richard Peck
Bagaimana dengan Rails 5?
Richard Peck
@ RichardPeck Saya punya masalah dengan Rails 5.0.3
garci560
67

Kerjakan saja:

gem 'mysql2', '~> 0.3.18' permata ini bekerja dengan rails version 4.x.x

jika menginstal gem 'mysql2', '~> 0.4.0'itu menghasilkan kesalahan memuat permata dan menyebabkan masalah kompatibilitas

Kaleem Ullah
sumber
Bersih, sederhana dan ringkas. Terima kasih!
Am33d
Bekerja untuk saya @kaleem
khalidh
9

Masalah ini telah diatasi di sini: https://github.com/brianmario/mysql2/issues/950

Untuk Rails 4.x tolong sematkan permata ke mysql2 '~> 0.4.0' untuk menghindari peningkatan 0.5.x.

Gemfile:

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

Lalu lari bundle update rails mysql2

Saat ini saya menggunakan mysql v 8.0.11

Abram
sumber
8

Jawaban untuk pertanyaan khusus ini berkaitan dengan kapan diposting dan versi Rails yang digunakan adalah bahwa masalahnya disebabkan dari melakukan bundle updatedan pembaruan versi mysql2 Anda ke 0.4.x yang memiliki masalah ketidakcocokan dengan ActiveRecord Rails terbaru.

Sekali lagi, harap perhatikan ini BUKAN solusi untuk orang yang menggunakan Rails / ActiveRecord versi lama.

Solusi cepat adalah dengan cukup menentukan mysql2versi di gemfile Anda sebagai berikut:

gem 'mysql2', '0.3.20'

Solusi panjangnya adalah menunggu pembaruan ke ActiveRecord atau sesuatu di mysql2 berubah.

Joshua F. Rountree
sumber
7

Jika Anda dapat memutakhirkan versi rel Anda, maka ubah Gemfile Anda ke ini dan itu akan menyelesaikan masalah tanpa menurunkan versi permata mysql2:

gem 'rails', '4.2.6'
Omac
sumber
5

Sebagai pemula yang lengkap saya bingung bagaimana melakukan ini, jadi saya hanya melakukan pemeriksaan percobaan dan akhirnya server saya berfungsi, berikut adalah bagaimana saya membuatnya bekerja.

masuk ke file direktori kerja ("kerja") dan dari sana masuk ke file aplikasi yang Anda buat ("sample_app") yang telah menginstal mysql 2 ke file gem ("Gemfile") sunting permata 'mysql2' menjadi permata 'mysql2', '~> 0.3.18'

sekarang kembali ke cmd dan jalankan perintah "bundle install".

jadi direktori untuk mengedit file dengan mempertimbangkan file-file di atas dalam tanda kurung harus. "c \ work \ sample_app \ Gemfile"

harap saya bisa membantu.

avinash vp
sumber
4

Ini biasanya terjadi ketika Anda kehilangan beberapa paket mysql pada mesin Anda. Apakah Anda mendapatkan kesalahan gem install mysql2? OS apa yang sedang Anda kerjakan?

Jika pada debian atau ubuntu coba sudo apt-get install libmysqlclient-dev.

Pastikan juga bahwa permata tidak ditempatkan di dalam grouppernyataan di Gemfile Anda.

F
sumber
+1 untuk bantuan. Namun saya sudah memiliki libmysqlclient-dev, dan permata itu tidak ada di dalam pernyataan grup. Yang aneh adalah ia bekerja dengan baik pada proyek saya yang lain, hanya saja tidak yang ini. Juga ini bukan instalasi baru OS saya. Saya belum mengubah apa pun di lingkungan saya selama beberapa waktu. Dan hal yang sama berlaku untuk server staging, di mana saya melihat masalah yang sama juga.
newUserNameHere
1

Punya masalah yang sama tetapi menambah masalah source 'https://rubygems.org'gem file diselesaikan.

Langkah:

tambahkan source 'https://rubygems.org'ke file gem Anda. Mengomentari mysql2 gemdan menambahkan gem 'mysql2', '~> 0.3.18' Jalankanbundle install

Mr94
sumber
0

coba ini:

bundle update mysql2

perintah ini akan memperbarui permata 'mysql2' Anda ke versi terbaru (harus 0.3.17 atau lebih tinggi) dan mulai server rails Anda.

mmike
sumber