Mac 安裝 MySQL 流程與 Rails Production mode 設定 MySQL database

北海道小樽 – 老人與海鷗

這是新手工程師系列文章第二篇,上班時間碰到各種坑,匆忙 debug 之後可能沒時間詳細研究 dug 發生的原因,長久下來成為複製貼上工程師也不意外,決定強迫自己每週至少寫一篇文章記錄這週碰到的坑。

最近剛結業於前端大大胡立的第二期程式導師實驗計畫,第三期課程已經開始,若有興趣可以關注胡立的Medium,內容很扎實,雖然我已經上過了 Alpha Camp 的 Ruby On Rails 線上課程,還是學到非常多程式與網路基礎理論。此外,胡立也有提到:

當你寫程式十年之後你將不能理解程式初學者的困惑,針對新手的程式教學文只有新手才能寫出來。

無論在 Alpha Camp 還是胡立的課程中都很推薦寫文章記錄心得,一方面作為自己的筆記,另一方面也幫助其他自學者,當然對於找工作也有幫助~

好啦!那我們進入正題!

安裝 Homebrew

利用 Homebrew 安裝 MySQL,在 terminal 上輸入:

$ brew install mysql

目前 Homebrew 安裝 MySQL 版本是 8.0 ,如果要安裝 5.7 可以輸入:

$ brew install mysql@5.7

MySQL 8.0 比起 5.7 有效能上的提升,比較可以參考其他人的文章。但會碰到一些坑,例如開啟 MySQL server 時,再顯示 batabase 時會出現以下錯誤訊息:

$ brew services start mysql // 運行 mysql
==> Successfully started mysql (label: homebrew.mxcl.mysql)
$ mysql -u root // 進入 mysql 
mysql> SHOW DATABASES; // 這時候需要輸入 sql 語法
ERROR 1449 (HY000): The user specified as a definer ('mysql.infoschema'@'localhost') does not exist

解決方式:退出 MySQL 並且升級,執行:

$ mysql_upgrade -u root -p; // -p 如果有密碼的話

MySQL 官方也建議每次升級以後執行升級,可以參考官方說明,其他 MySQL 8.0 會碰到的坑可以參考其他人的文章,我自己是沒有碰到。

開啟 Rails production mode

當 APP 需要上線時,必須使用 Production mode ,相較於 Development mode 效能更高,詳細差異可以參考其他人的文章。另外 Production mode 一般會設定正式使用的 Database ,本地先測試沒問題再推上伺服器 Deploy,減少上伺服器檢查錯誤的機會。

Development mode 使用 SQLite 做為資料庫,不用輸入帳號密碼,也不需要開啟資料庫伺服器,對於開發者來說非常方便,然而正式部署以後通常會使用效率更高的資料庫,例如: MySQL,因此需要更改 config / database.yml

production:
  adapter: mysql2 // mysql2 gem
  encoding: utf8 // 防止中文亂碼
  reconnect: false // 將指令發送到服務器時若發現連接已關閉,重新連接到服務器,並且再次發送語句。可以選擇 true or false, default: false。
  database: your_database_name // 輸入你本地 MySQL 的 DB 名稱
  pool: 5 // database pooling 
  username: root // mysql 使用者名稱
  password: your_password // 使用者密碼
  socket: /tmp/mysql.sock

備註 1 : socket 概念可以參考此文章
備註 2 : database pooling 概念可以參考此文章


設定好 database.yml ,記得打開 MySQL server ,接著就可以在 Terminal 中輸入:

$ rails server -e production

開啟 Production mode 之前記得執行:

$ rake db:migrate RAILS_ENV=production

Production mode 跟 Development mode 的資料庫不同,也方便開發者測試正式部署環境。

這篇文章到此為止,如果有錯誤歡迎留言指正,對於文章撰寫有任何建議也歡迎留言,歡迎按下鼓掌按鈕,最多可以按 50 下喔!下一篇將寫 Docker + Docker Compose + Docker Machine,如何實現自動化部屬(這週忙部署真的是苦啊~)。


Share on facebook
Facebook
Share on linkedin
LinkedIn
Share on twitter
Twitter

More to explorer

Close Menu