rake db:schema:加载不填充schema_migrations表

时间:2013-11-20 20:48:34

标签: ruby-on-rails sql-server schema

我有一个新的数据库,我正在尝试重新创建,但运行rake db:schema:load根本不会填充schema_migrations表。结果是每个迁移现在都在等待。 schema.rb中的模式版本与最新的迁移相匹配,this answer表示我认为发生了什么(Rails使用当前迁移nubmer之前的所有迁移编号填充迁移表),在此特定实例中,发生。我的同事已经证实这种情况正在发生在他们的数据库中,所以这绝对是一个项目范围的问题。虽然db用户正在创建所有表,但我们正在使用带有自定义模式的SQLServer。我完全难过了。有什么想法吗?

3 个答案:

答案 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。)