数据库调试和故障排除
本节的目的是提供一些复制参考,当您遇到一些令人头疼的数据库问题时,可以将其用作参考。
一个简单的第一步是在Slack或谷歌“GitLab”中搜索你的错误。
可用RAILS_ENV
生产
(通常不用于您的主要GDK数据库,但您可能需要例如omnibus)发展
(这是你的主要GDK数据库)测试
(用于rspec和菠菜等测试)
用核武器摧毁一切,重新开始
如果你只是想删除所有内容,然后用一个空的DB重新开始(~1分钟):
bundle exec rake db:reset RAILS_ENV=development
如果您只是想删除所有内容并重新使用虚拟数据(约40分钟)。这也是db:重置
并运行特定于db的迁移:
bundle exec rake dev:setup RAILS_ENV=development
如果你的测试数据库给你的问题,它是安全的,因为它不包含重要的数据:
bundle exec rake db:reset RAILS_ENV=test . exe
迁移争吵
bundle exec rake db:migrate RAILS_ENV=development
:执行您可能从MR中获取的任何挂起的迁移bundle exec rake db:migrate:status RAILS_ENV=development
:检查所有迁移是否正常向上
或下来
bundle exec rake db:migrate:down VERSION=20170926203418 RAILS_ENV=development . exe
:取消迁移bundle exec rake db:migrate:up VERSION=20170926203418 RAILS_ENV=development
:设置迁移bundle exec rake db:migrate:redo VERSION=20170926203418 RAILS_ENV=development . exe
:重新运行特定的迁移
手动访问数据库
通过以下命令之一访问数据库(它们都将您带到相同的位置)
gitlabhq_developmentbundle exec rails dbconsole RAILS_ENV=developmentbundle exec rails db RAILS_ENV=development
\问
:停止/退出\ dt
:列出所有表格\ d +问题
:列出问题
表格创建表board_labels()
:创建一个名为board_labels
SELECT * FROM schema_migrations WHERE version = '20170926203418';
:检查是否运行了迁移DELETE FROM schema_migrations WHERE version = '20170926203418';
:手动移除迁移
常见问题解答
ActiveRecord:: PendingMigrationError
在春天
运行规格时使用弹簧预紧器,测试数据库可能会进入损坏状态。尝试运行迁移或删除/重置测试数据库没有效果。
$包执行Spring rspec some_spec.rb…失败/错误:ActiveRecord:: Migration.maintain_test_schema !ActiveRecord:: PendingMigrationError:迁移正在等待中。要解决此问题,请运行:bin / rake db:迁移RAILS_ENV=测试# ~ / .rvm /珠宝/ ruby-2.3.3 /珠宝/ activerecord-4.2.10 / lib / active_record /迁移。rb: 392:“check_pending !”…0个例子,0个失败,1个错误发生在例子之外
要解决这个问题,您可以终止运行规范之间的spring服务器和应用程序。
$Ps x |grep春天Eric 87304 1.3 2.9 3080836 482596 ??s 10:12AM 4:08.36 spring app | gitlab |启动6小时前测试模式eric 37709 0.0 0.0 2518640 7524 s006 S Wed11AM 0:00.79 spring server | gitlab |开始29小时前$杀了87304$杀了37709