无论分支如何,都会运行迁移

时间:2016-11-16 09:12:18

标签: ruby-on-rails migration ruby-on-rails-4.2 schema.rb

我正在不同的分支机构工作,在这些分支机构上有迁移文件。有ADD . ./meteorapp个文件。

我的问题是,无论我目前在哪个分支,运行迁移都会以某种方式更改schema.rb,就像它考虑了所有分支上的所有迁移一样。

说,我已在分支schema.rb上创建了Foo模型,并使用相应的表A,运行迁移并切换到另一个分支。

在我当前的分支foos上运行其他迁移(比如创建表bars),其中没有B表,创建它:

foos

问题:如何根据当前分支上的迁移使# while on branch B Foo #=> NameError: uninitialized constant Foo ActiveRecord::Base.connection.table_exists?('foos') #=> true 更改?

3 个答案:

答案 0 :(得分:3)

db:migratedb:rollback作业从用户数据库架构写入schema.rb文件,而不是用户迁移脚本。即使您更改git分支,您的数据库状态也不会更改。所以foos表存在,但Foo模型不存在。

我的回答:只需在结帐分支之前回滚,或者每次结账时写一个git hook脚本进行回滚

答案 1 :(得分:1)

使用每个分支数据库和连接设置。

答案 2 :(得分:0)

您可能在git上忽略了schema.rb。一种解决方案是不要忽略此文件。查看项目根文件夹中的.gitignore,然后从中获取schema.rb。

如果它不在.gitignore中,则您的问题与schema.rb无关,因为每个分支都应该有所不同。问题可能是您只有一个本地数据库文件,并且您正在同一个数据库中运行来自不同分支的迁移,这就是您获得的原因:

ActiveRecord::Base.connection.table_exists?('foos')
#=> true

对于每个分支,您应该拥有不同的数据库副本,并在更改正在处理的分支时更改它,使用config/databases.yml上的不同配置,环境变量或手动更改数据库文件名。