我有一个新的数据库,我正在尝试重新创建,但运行rake db:schema:load根本不会填充schema_migrations表。结果是每个迁移现在都在等待。 schema.rb中的模式版本与最新的迁移相匹配,this answer表示我认为发生了什么(Rails使用当前迁移nubmer之前的所有迁移编号填充迁移表),在此特定实例中,发生。我的同事已经证实这种情况正在发生在他们的数据库中,所以这绝对是一个项目范围的问题。虽然db用户正在创建所有表,但我们正在使用带有自定义模式的SQLServer。我完全难过了。有什么想法吗?
答案 0 :(得分:19)
Per D. Patrick,回答我自己的问题:
因此,最终结果是另一位开发人员安装了activerecord-nulldb-adapter
,其中包括ActiveRecord::Schema.define
,并且没有initialize_schema_migrations_table()
或assume_migrated_up_version()
。我卸载了gem,运行db:schema:load
就好了。
答案 1 :(得分:3)
尝试使用跟踪标志
运行命令rake db:schema:load --trace
在日志结束时,您应该看到行
-- initialize_schema_migrations_table()
-> 0.0045s
另外,值得检查一下,您是否正确测试了schema和schema_migrations表中的套装生成表。
答案 2 :(得分: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。)