rake db:schema:load 不填充 schema_migrations 表
Posted
技术标签:
【中文标题】rake db:schema:load 不填充 schema_migrations 表【英文标题】:rake db:schema:load not populating schema_migrations table 【发布时间】:2013-12-05 01:54:56 【问题描述】:我有一个正在尝试重新创建的新数据库,但运行 rake db:schema:load 根本不会填充 schema_migrations 表。这样做的结果是每个迁移现在都处于待处理状态。 schema.rb 中的模式版本与最新的迁移匹配,this answer 将表明我认为正在发生的事情(Rails 使用当前迁移编号之前的所有迁移编号填充迁移表)在这种特定情况下没有发生。我的同事已经确认他们的数据库也发生了这种情况,所以这绝对是一个项目范围的问题。尽管 db 用户正在正确创建所有表,但我们正在使用带有自定义架构的 SQLServer。我完全被难住了。有什么想法吗?
【问题讨论】:
约翰,您对未接受的答案的评论对我很有帮助。我认为最好回答您自己的问题并接受答案。 【参考方案1】:我遇到了类似的问题,Google 把我带到了这里。这与您的问题不完全相同,但我会写下来以防万一它对最终来到这里的任何人有所帮助,因为我找不到其他任何东西。
简而言之:rails db:schema:load
没有正确设置我的 schema_migrations
表 - 当我运行 rails db:migrate:status
时,最近的迁移被标记为 down
,尽管从数据库中可以清楚地看到迁移实际上已经运行。这意味着当我尝试在我的应用中执行任何操作时,我收到了“迁移仍在等待中”错误。
原来问题出在db/schema.rb
。在文件顶部,ActiveRecord::Schema.define(version: 20180803094506) do
行不正确。由于我的源代码管理中的混淆,20180803094506
是错误的时间戳。我通过将此时间戳更改为我最近迁移的时间戳(即db/migrate
中最后一个文件名称的第一部分)来解决了这个问题。
(Rails 源代码的相关位是here,如果有人感兴趣。)
【讨论】:
【参考方案2】:根据 D. Patrick,回答我自己的问题:
所以最终结果是另一个开发人员安装了activerecord-nulldb-adapter
,猴子修补了ActiveRecord::Schema.define
,但没有运行initialize_schema_migrations_table()
或assume_migrated_up_version()
。我卸载了 gem,运行了我的 db:schema:load
就好了。
【讨论】:
【参考方案3】:尝试使用跟踪标志运行命令
rake db:schema:load --trace
在日志的末尾,您应该会看到行
-- initialize_schema_migrations_table()
-> 0.0045s
另外,值得检查一下你是否正确地从模式和 schema_migrations 表生成表。
【讨论】:
很奇怪,它没有。在开发环境中,这些行是最后生成的:-- initialize_schema_migrations_table() -> 0.0034s -- assume_migrated_upto_version(20131111151423, ["/Users/---/code/---/db/migrate"])
-> 2.1161s 测试环境不执行这两条语句。我不确定什么会压制他们。
所以最终结果是另一个开发人员安装了 activerecord-nulldb-adapter,它猴子修补 ActiveRecord::Schema.define 并且不运行 initialize_schema_migrations_table() 或假设_migrated_up_version()。以上是关于rake db:schema:load 不填充 schema_migrations 表的主要内容,如果未能解决你的问题,请参考以下文章
运行 rake db:schema:load 时出现“致命:角色“root”不存在”
Rails db:schema:load 错误:Mysql2::Error:无法删除或更新父行:外键约束失败
附加到 rake db:seed in rails 并在不复制数据的情况下运行它