一、前言
今天尝试下在rails中将sqlite3数据库换成mysql数据库,遇到了报错,以下是报错详情和解决过程
二、报错记录和解决过程
1.创建新的项目blog2
终端执行:
rails new blog2 --skip-bundle -d mysql
这个指令的意思是跳过自动安装bundle,并改用mysql数据库
2.新建blog的model
终端执行:
rails g modle blog
在新生成的迁移文件中加入代码:
def change
create_table :blogs do |t|
+ t.string :title
+ t.text :description
t.timestamps
end
3.运行迁移
终端执行:
rails db:migrate
这时候就出现了报错,如下图:
由于没有遇到过这种错误,因此我就去谷歌寻找解决方案
4.google搜索
将"Mysql2::Error: Can't connect to local MySQL server through socket '/tmp/mysql.sock'"这个错误提示进行google搜索,筛选了两个方案:
(1)方案1:使用mysql.server start重启mysql服务
终端执行:
mysql.server start
再次运行:
rails db:migrate
仍然出现相同的报错
(2)方案2:将database.yml中的host: localhost改成host: 127.0.0.1
这里在修改database.yml文件时,没有对齐,导致了报错:
正确缩进后,再次执行:
rails db:migrate
产生了新的报错:
提示:Mysql2::Error: Unknown database 'blog2_development'
5.向前辈请教
给出的解决方案是,先执行:
rails db:create
目的是为了产生相应的数据库
于是,我将database.yml文件内容还原成初始状态,即使用原来的host: localhost
然后执行:
rails db:create
rails db:migrate
果然顺利解决了问题,如图:
三、结论
在使用mysql时,先要运行rails db:create
创建相应的数据库,然后再rails db:migrate
,否则由于没有数据库的存在,再怎么执行迁移命令也会报错的。
四、参考资料: