Rails 4 - Gem :: LoadError: ระบุ 'mysql2' สำหรับอะแดปเตอร์ฐานข้อมูล แต่ไม่ได้โหลดอัญมณี


150

ใน gemfile ของฉันฉันมี:

gem 'mysql2'

database.yml ของฉันเป็นดังนี้:

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

ฉันเรียกใช้ทั้งสองbundle updateและbundle installGemfile.lock ของฉันแสดง mysql2

อย่างไรก็ตามเมื่อฉันเรียกใช้rake db:migrateฉันได้รับสิ่งนี้ทั้งบนคอมพิวเตอร์ของฉันและบนเซิร์ฟเวอร์ 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).
.....

เพียงเพื่อให้แน่ใจว่าไม่มีรุ่นที่ไม่ดีของ mysql2 หรือบางสิ่งบางอย่างฉันทำbundle clean --forceและวิ่งbundle installและbundle updateอีกครั้งและเมื่อฉันเรียกใช้gem listฉันเห็นmysql2 (0.4.0)และไม่มีรุ่นอื่น

ความคิดใด ๆ ที่จะได้รับการชื่นชมมากที่สุด


สารละลาย

ปัจจุบันมีปัญหาเกี่ยวกับ Rails 4.1.x และ 4.2.x ตามรายงานข้อผิดพลาดนี้มันจะได้รับการแก้ไขในรุ่นถัดไปของ Rails 4.2.x (เครดิตถึง dcorr ในความคิดเห็นสำหรับลิงก์)

ในเวลาเฉลี่ยคุณสามารถแก้ไขได้โดยทำการลดระดับเป็นรุ่น 0.3.18 ของ mysql2 โดยเพิ่มบรรทัดนี้ใน gemfile ของคุณ:

gem 'mysql2', '~> 0.3.18'

1
ลองbundle update mysql2
Pavan

ฉันก็ลองเช่นกัน ใช้งานไม่ได้ จากสิ่งที่ฉันเห็นmysql2 (0.4.0)คือพลอยทับทิมรุ่นใหม่ล่าสุดจะติดตั้งแล้ว
นี่

12
นี่คือทางออก: gem 'mysql2', '~> 0.3.18'ใน Gemfile
newUserName ที่นี่

6
นี้ไม่ได้เป็นปัญหากับ mysql2 มันเป็นปัญหาที่มีความต้องการในอะแดปเตอร์ ActiveRecord นี้: github.com/rails/rails/issues/21544 สิ่งนี้ได้รับการแก้ไขใน Rails master: github.com/rails/rails/commit/…
dcorr

@Pavan มายเมะมาย !! _ / _
Varun

คำตอบ:


50

เพียงแค่อัปเดตเพิ่มเติม - โซลูชันในคำถามนั้นถูกต้อง

ความคิดเห็นที่ 4 มีค่าน่าจด:

นี้ไม่ได้เป็นปัญหากับ mysql2 มันเป็นปัญหาที่มีความต้องการในอะแดปเตอร์ ActiveRecord นี้: http://github.com/rails/rails/issues/21544 ได้รับการแก้ไขแล้วใน Rails Master: https://github.com/rails/rails/commit/5da5e3772c32593ecf2f27b8865e81dcbe3af692

ฉันสามารถผูกRails 4.2.4กับ4-2-stableสาขาและทำให้มันทำงานกับรุ่นล่าสุดmysql2:

ป้อนคำอธิบายรูปภาพที่นี่

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'

ถ้าความเร็วเป็นสิ่งที่สำคัญลำดับแรกมันจะเร็วกว่าเล็กน้อยเมื่อจะชน mysql2 ลงไปที่ '0.3.20' แทนที่จะยึดราง '4.2.4' ไปยังสาขา: '4-2-stable'
seanriordan08

มันยากที่จะเชื่อว่า mysql gem มีปัญหาบั๊กกี้ที่ตระหนี่มากมายเมื่อเปรียบเทียบกับ
postgreSQL

มันเป็นสภาพแวดล้อมของ Windows - มันเหมือนกันกับ Imagemagick เป็นต้นคุณต้องใช้การพึ่งพาจากภายนอกและเนื่องจาก Windows ไม่มี repo ส่วนกลางสำหรับพวกเขามันจึงยุ่งยาก
Richard Peck

แล้ว Rails 5 ล่ะ?
Richard Peck

@RichardPeck ฉันมีปัญหากับ Rails 5.0.3
garci560

67

แค่ทำ:

gem 'mysql2', '~> 0.3.18' อัญมณีนี้ใช้ได้กับ rails version 4.x.x

หากติดตั้งgem 'mysql2', '~> 0.4.0'จะสร้างข้อผิดพลาดในการโหลด gem และทำให้เกิดปัญหาความเข้ากันได้


สะอาดเรียบง่ายและรัดกุม ขอบคุณ!
Am33d

ทำงานให้ฉัน @kaleem
khalidh

9

ปัญหานี้แก้ไขได้ที่นี่: https://github.com/brianmario/mysql2/issues/950

สำหรับ Rails 4.x โปรดตรึง gem ไว้ที่ mysql2 '~> 0.4.0' เพื่อหลีกเลี่ยงการอัพเกรด 0.5.x

Gemfile:

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

จากนั้นเรียกใช้ bundle update rails mysql2

ฉันกำลังใช้mysql v 8.0.11 อยู่


8

คำตอบสำหรับคำถามนี้โดยเฉพาะเมื่อมีการโพสต์และรุ่นของ Rails ที่ใช้คือปัญหาเกิดจากการทำbundle updateและเวอร์ชัน mysql2 ของคุณอัพเดตเป็น 0.4.x ซึ่งมีปัญหาความไม่ลงรอยกันกับ Rails ActiveRecord ล่าสุด

โปรดทราบว่านี่ไม่ใช่วิธีแก้ปัญหาสำหรับผู้ที่ใช้ Rails / ActiveRecord เวอร์ชั่นเก่ากว่า

วิธีแก้ปัญหาอย่างรวดเร็วคือการระบุmysql2เวอร์ชันใน gemfile ของคุณดังนี้:

gem 'mysql2', '0.3.20'

วิธีแก้ปัญหาที่ยาวนานคือรอการอัปเดตเป็น ActiveRecord หรือบางอย่างใน mysql2 เพื่อเปลี่ยน


7

หากคุณสามารถอัพเกรดเวอร์ชั่น Rails ของคุณได้ให้เปลี่ยน Gemfile เป็นแบบนี้และมันจะแก้ปัญหาโดยไม่ต้องดาวน์เกรด mysql2 gem:

gem 'rails', '4.2.6'

5

ในฐานะผู้เริ่มต้นที่สมบูรณ์ฉันสับสนเกี่ยวกับวิธีการทำเช่นนี้ดังนั้นฉันเพิ่งทำการตรวจสอบการทดลองและในที่สุดก็ทำให้เซิร์ฟเวอร์ทำงานได้นี่คือวิธีที่ฉันใช้งานได้

เข้าไปในไฟล์ไดเรกทอรีทำงาน ("งาน") และจากนั้นเข้าไปในไฟล์ของแอพที่คุณสร้าง ("sample_app") ซึ่งติดตั้ง mysql 2 ไปที่ไฟล์ gem ("Gemfile") แก้ไขgem 'mysql2' เป็นgem 'mysql2', '~> 0.3.18'

ตอนนี้กลับไปที่ cmd และรันคำสั่ง "bundle install"

ดังนั้นไดเรกทอรีที่จะแก้ไขไฟล์โดยคำนึงถึงไฟล์ด้านบนในวงเล็บควรเป็น "C \ ทำงาน \ sample_app \ Gemfile"

หวังว่าฉันจะช่วยได้บ้าง


4

สิ่งนี้มักจะเกิดขึ้นเมื่อคุณพลาดแพ็คเกจ mysql บางอย่างในเครื่องของคุณ คุณได้รับข้อผิดพลาดจากgem install mysql2หรือไม่ คุณใช้ระบบปฏิบัติการอะไรอยู่

sudo apt-get install libmysqlclient-devถ้าในเดเบียนหรืออูบุนตูลอง

ตรวจสอบให้แน่ใจด้วยว่าไม่ได้ใส่อัญมณีในgroupคำสั่งใน Gemfile ของคุณ


+1 สำหรับความช่วยเหลือ อย่างไรก็ตามฉันมี libmysqlclient-dev แล้วและอัญมณีไม่ได้อยู่ในคำสั่งกลุ่ม สิ่งที่แปลกคือมันทำงานได้ดีในโครงการอื่นของฉันไม่ใช่แค่โครงการนี้ นี่ไม่ใช่การติดตั้งระบบปฏิบัติการใหม่ฉันไม่ได้เปลี่ยนแปลงอะไรเลยในบางครั้ง และเช่นเดียวกันกับเซิร์ฟเวอร์ staging ที่ฉันเห็นปัญหาเดียวกันเช่นกัน
นี่

1

มีปัญหาเดียวกัน แต่เพิ่มsource 'https://rubygems.org'ไปยังด้านบนของไฟล์อัญมณีแก้ไขปัญหา

ขั้นตอน:

เพิ่มsource 'https://rubygems.org'ในไฟล์อัญมณีของคุณ ใส่ความคิดเห็นmysql2 gemและเพิ่มgem 'mysql2', '~> 0.3.18' Runbundle install


0

ลองนี้:

bundle update mysql2

คำสั่งนี้จะอัปเดตอัญมณี 'mysql2' ของคุณเป็นเวอร์ชันล่าสุด (ควรเป็น 0.3.17 หรือสูงกว่า) และเริ่มเซิร์ฟเวอร์ Rails ของคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.