舊專案環境安裝問題,mysql2跟rails不相容?


#1

使用電腦mac os mojave
專案rails (4.0.0)

mysql2 目前試過0.5.2 / 0.4.10 / 0.3.16 /0.3.20 / 0.3.21

0.5.2 / 0.4.10都可以安裝,但是開啟rails server會出現錯誤
Specified ‘mysql2’ for database adapter, but the gem is not loaded. Add gem 'mysql2' to your Gemfile. (Gem::LoadError)

0.3.x則是連安裝都無法


#2

抱歉 … 我一直認為我有回 Orz" 結果一直躺在草稿內,以下是原文

===========

嘛,下次貼圖注意一點,否則人家都知道 … 一些訊息哈哈

首先,mysql2 有 C 語言編譯的部分,需要 libmysqlclient 的支援,osx 下應該類似

brew install mysql

應該就會幫你裝好 server & client 裡面就有包 libmysqlclient 了,至於其他,你的問題應該是 Gemfile 內的 mysql2 版本過低 … 你應該把你的 Gemfile 貼上來才對?或是直接強至指定版本類似

gem 'mysql2', '~> 0.4.10'

這樣的格式如何?


#3

這篇大概知道原因了,但 … 我沒辦法修正,大概描述幾點

首先,mysql2 gem 早期版本只支援 mysql5.5 ~ 5.6 的樣子,5.7 之後應該就會開始噴死,因為會編譯不過,且 macOS 的 xcode 也都有升級,雖然 brew 可以把 mysql 裝到 5.5 版,但仍可能會編譯不過,而現在 brew 預設裝的已經是 8.x 了 … 有趣的是最新的 mysql2 gem 0.5 後新舊都編譯得過,但當年的 rails spec 有寫死 mysql2 gem 的版本必須為 0.3,但 Gemfile 內卻沒限制版本,會造成 rails 開不起來然後甚至和你說沒有 mysql2 gem … 有的沒的

所以以上,雖然我可以帶你走很多 dirty 的路,類似以下,但最後還是失敗的

gem uninstall mysql2 --all # 移除所有 mysql2 gem
brew remove mysql # 移除目前 mysql
rm -rf /usr/local/var/mysql* #清空舊有的 data 資料夾,否則 mysql 會跑不起來(刪庫跑路)
brew install mysql@5.5 #安裝舊版的 mysql
brew link mysql@5.5 --force #強制 link
# 重開機後重下面開始做
brew services start mysql@5.5 #開啟 server
gem i mysql2 -v=0.3.10 #嘗試編譯
# fail

我可能可以修好,但 … 單純建議,你重新嘗試跑在 linux 上面(前提一樣,使用舊版本的 mysql 等等),或把你的專案更新成新版如何?因為對我而言這些應該都 out of date & 使用舊版會增加安全性危險之類的