about 2 years ago

今天做rails01 6-3 实际发表文章的时候发现网页有如下问题:
前一个小节write a post按钮也没有出来,这节的文章内容那一栏也没有线上,点击文章列表显示出错:


提示问题:

检查三遍做的步骤,发现group_id有关的就这个文件:

找不到原因,删除出错的当前分支,回到上一个分支ch04,
从第六章重新开始,输入git checkout -b ch05,但是第一步的rake db:migrate就出错了

Tasks TOP那行显示貌似和db migrate有关

感谢关键时刻Zion同学的帮忙,
debug过程如下:

查看出错的rake db:migrate开头那里


有这句:SQLite3::SQLException: table "posts" already exists,已经有post表

用命令:rails db:rollback 把数据库迁移回退一步

输入:rails db:migrate:status查看状态


问题就在那个no file(可能是之前跳分支回去的时候没有处理 数据迁移,git只负责代码的管理,不管理数据库)
然后:rails d model post
再看状态:rails db:migrate:status

rails d model post这一步之前需要 rails db:rollback 一下,回退一步数据库的迁移,
用做rails db:rollback之前 create post 哪一步前面显示的应该是 up,运行命令后变成 down 就可以 rails d model post 了

用下列命令前前截图:

rails d model post
rails db:migrate:reset
(rails db:migrate:reset在有 no file的时候才用,后果是会把数据库里面的数据清空)
rails db:migrate:status


rails g model post content:text groupid:integer userid:integer
运行命令后截图

rails db:migrate

总结:
rails db:migrate:status ********** NO FILE **********的问题
使用下列命令
rails db:rollback(回退一步数据库的迁移)
rails d model post(数据库里面的数据清空)
rails db:migrate:reset
rails db:migrate:status(查看状态)

接下去可以重新生成没有问题的数据表了
eg.:
rails g model post content:text group_id:integer user_id:integer
rails db:migrate
最后一切恢复正常:

PS:rails 5.0以后所有的 rake 命令都可以用 rails 代替
来张debug全貌图:

← 全栈rails101 6-2 bug纪录 全栈rails101 6-2 出错纪录 →