我在Heroku(测试,阶段和生产),我的Rails应用程序的3个实例。当我想测试一个真实用户数据发生的问题时,我想要使用heroku db:pull --app生产,然后使用heroku db:push --app测试。问题是,在这一点上,heroku rake db:migrate --app test会抛出一个错误,因为迁移尝试创建的列已经创建。的Heroku:当拉动生产数据库测试和运行耙分贝迁移问题:迁移
我的理解是,Heroku的DB:推推数据导入现有的数据库模式而非字面上推动整个数据库(包括模式)。这意味着我们推动的模式可能比我们推动的迁移表更先进,因为这个迁移表将缺少没有运行在我们从中提取的数据库上的迁移记录,但显然已经运行在我们正在推进的数据库上。
我的第一个问题是,我在我是如何工作的理解是否正确?我的第二个问题是如何解决这个问题,以便我可以提取生产数据,将其保存在测试中并运行迁移而不会收到此错误。理想情况下,我想复制生产数据库并将其粘贴到测试中,然后完全迁移它,因为如果我可以这样做,我就不必担心测试中的现有模式。有没有办法做到这一点?
如果不是这样,是有办法的假,要迁移已经通过为每一个已经在我的测试数据库运行迁移记录填充新的迁移表运行?
它看起来像Heroku的DB:拉却紧紧新的数据到我的现有模式,虽然这种情况发生运行耙分贝,所以当:迁移对当地产生以下错误。当我查看数据库时,我发现它在迁移方面落后,并且有在尚未运行的迁移中创建的表。有没有办法将整个数据库拉到本地,包括模式,并覆盖我在本地的所有内容? SQLite3 :: SQLException:表“user_roles”已经存在 – user531065
是的,拉会做到这一点。如果你已经在本地运行了表示创建表的迁移,那么从现场拉动并不会首先清除你的本地数据库 - 所以你的user_roles表已经存在于本地,但是你的schema_migrations表不会认为它已经运行了,然后bam,错误。你想确保你的本地数据库完全是通过数据库清空耙:重置之前,你拉。 –
完美。这解决了我的问题。谢谢! – user531065