Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在删除迁移后修复rails中的数据库?_Ruby On Rails_Heroku_Rails Migrations - Fatal编程技术网

Ruby on rails 如何在删除迁移后修复rails中的数据库?

Ruby on rails 如何在删除迁移后修复rails中的数据库?,ruby-on-rails,heroku,rails-migrations,Ruby On Rails,Heroku,Rails Migrations,好吧,事情就是这样: 1我需要向表中添加一列,但不是生成迁移,而是手工编写的。我给它的文件名似乎工作正常,但没有时间戳,所以事情就糟了 2在混乱了很久之后,我更新了schema.rb文件,使它看起来像我想要的那样。然后我重置了数据库。那很好,但是 3当我去运行迁移时,最后几个迁移已经运行了,所以它认为它们是重复的。所以我删除了所有迁移,因为模式看起来很好,而且一切正常 4但现在它在我的本地机器上运行良好,但当我尝试部署到Heroku时,我遇到了真正的问题,Heroku似乎可以访问我的旧迁移,并且

好吧,事情就是这样:

1我需要向表中添加一列,但不是生成迁移,而是手工编写的。我给它的文件名似乎工作正常,但没有时间戳,所以事情就糟了

2在混乱了很久之后,我更新了schema.rb文件,使它看起来像我想要的那样。然后我重置了数据库。那很好,但是

3当我去运行迁移时,最后几个迁移已经运行了,所以它认为它们是重复的。所以我删除了所有迁移,因为模式看起来很好,而且一切正常

4但现在它在我的本地机器上运行良好,但当我尝试部署到Heroku时,我遇到了真正的问题,Heroku似乎可以访问我的旧迁移,并且拒绝存在一个明显存在的表。我重置了很多次

那么,有没有什么方法可以让我从模式开始,不再迁移,让系统忘记曾经有过迁移?或者,如果我创建两个包含所有相关表数据的新迁移,会怎么样

编辑:这是我从heroku日志中得到的。基本上,它让我进入登录页面,但当我尝试登录时,这种情况就会发生

于2013-02-19 18:27:01+0000于89.27.92.12开始获取/回家 2013-02-19T18:27:01+00:00应用程序[web.1]: 2013-02-19T18:27:01+00:00应用程序[web.1]:由MaterialsControllerhome以HTML格式处理 2013-02-19T18:27:01+00:00应用程序[web.1]:在26毫秒内完成500个内部服务器错误 2013-02-19T18:27:01+00:00应用程序[web.1]: 2013-02-19T18:27:01+00:00应用程序[web.1]:ActiveRecord::StatementInvalid PGError:错误:关系材料不存在 2013-02-19T18:27:01+00:00应用程序[web.1]:第4行:其中a.attrelid='materials':regclass 2013-02-19T18:27:01+00:00应用程序[web.1]:^ 2013-02-19T18:27:01+00:00应用程序[web.1]:从pg_属性a左连接pg_属性d 2013-02-19T18:27:01+00:00应用程序[web.1]::选择a.attname、格式a.attTypea.attTyped、a.attTypeMod、d.adsrc、a.attnotnull 2013-02-19T18:27:01+00:00应用程序[web.1]:其中a.attrelid='materials':regclass 2013-02-19T18:27:01+00:00应用程序[web.1]:和a.attnum>0而不是a.attisdropped 2013-02-19T18:27:01+00:00应用程序[web.1]:在a.attrelid=d.adrelid和a.attnum=d.adnum上 2013-02-19T18:27:01+00:00应用程序[网站1]:: 2013-02-19T18:27:01+00:00应用程序[web.1]:应用程序/控制器/材料/控制器。rb:11:在“获取材料”中
2013-02-19T18:27:01+00:00应用程序[web.1]:按a.attnum下单这听起来真是一团糟

PGError:ERROR:Relationship materials不存在明确说明架构中缺少此表

通过直接查看数据库,可以查看当前迁移状态:ActiveRecord::Base.connection.executeSELECT*from schema\u migrations.map&:to\u


您还可以转储数据库并在本地查看:

希望您的所有代码都在源代码管理下,并且您有数据库的备份—迁移文件名中的时间戳存储在一个数据库表中,rails在运行db:migrate时创建了一个名为“schema_migrations”的数据库表。它会检查该表以决定是否应该运行该表您的迁移文件—如果它存在于表中,它将不会运行—使用rails generate migration自动创建正确的文件名,但如果需要,您可以手动执行该部分—在schema.rb中,您可能会看到插入到schema_migrations中的内容