Mac 安装 MySQL 流程与 Rails Production mode 设定 MySQL database

这是新手工程师系列文章第二篇,上班时间碰到各种坑,匆忙 debug 之后可能没时间详细研究 dug 发生的原因,长久下来成为复制贴上工程师也不意外,决定强迫自己每周至少写一篇文章记录这周碰到的坑。

当你写程序十年之后你将不能理解程序初学者的困惑,针对新手的程序教程文只有新手才能写出来。

无论在 Alpha Camp 还是胡立的课程中都很推荐写文章记录心得,一方面作为自己的笔记,另一方面也帮助其他自学者,当然对于找工作也有帮助~

好啦! 那我们进入正题!

安装 Homebrew

首先恭喜你拿到一台全新的 Mac ,但这时候需要重新设置环境,首先让我们安装 Homebrew ,方便在 Mac 上安装系统没有的套件,例如 Wget 这种工程师常用的软件。 请打开 termianl 输入:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

我有安装iterm2替代内置的terminal,强烈推荐设置ZSH美化你的terminal接口,不然查log眼睛会直接脱窗,设置跟教程可以参考其他大大的文章。

安装 MySQL

利用 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,因此需要更改 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 // socket 概念可以參考此文章

设置好 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,如何实现自动化部属(这周忙部署真的是苦啊~)。

(0)
麦克哥麦克哥

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注