我正在不同的分支机构工作,在这些分支机构上有迁移文件。有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
更改?
答案 0 :(得分:3)
db:migrate
或db: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
上的不同配置,环境变量或手动更改数据库文件名。