我已发布a couple other questions关于我正在开展的项目,我终于明白了我的工作方式。
我将我的东西上传到heroku,并且不得不花费几个小时来弄清楚如何摆脱sqlite3的所有实例并切换到PG。我解决了这个问题,但仍然出现错误。原来是一次迁移。
我跑了heroku open
并得到了错误页面。我跑了heroku logs
并得到了这个错误;
2014-01-08T22:51:29.356850+00:00 app[web.1]: PG::Error: ERROR: relation "messages" does not exist
2014-01-08T22:51:29.356850+00:00 app[web.1]: LINE 1: SELECT "messages".* FROM "messages"
我记得的错误是因为没有运行迁移。然后我运行bundle exec rake db:migrate
,然后heroku run rake db:migrate
,我收到了错误;
Running `rake db:migrate` attached to terminal... up, run.9247
rake aborted!
Multiple migrations have the name CreateMessages
/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.0/lib/active_record/migration.rb:978:in `validate'
/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.0/lib/active_record/migration.rb:876:in `initialize'
/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.0/lib/active_record/migration.rb:764:in `new'
/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.0/lib/active_record/migration.rb:764:in `up'
/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.0/lib/active_record/migration.rb:742:in `migrate'
/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.0/lib/active_record/railties/databases.rake:42:in `block (2 levels) in <top (required)>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)
最初我有2个迁移文件,但我忘记了迁移。我手动进入db/migrate
并删除了其中一个。然后我做了
git add .
git commit -m "message"
git push
然后我跑了
git push heroku master
尝试在同一级别上获取它,但我仍然有这个错误。有谁知道我能做些什么来解决这个问题?任何帮助都会很棒。
答案 0 :(得分:2)
第一:我的理解是您可以重置数据库实例。如果这是正确的,请继续阅读选项1:
首先重置你的数据库:
heroku pg:reset
heroku run rake db:migrate
{{1}}
然后确认您确实删除了冲突的迁移。如果需要,继续进行任何git推送。
此时,重新迁移db:
{{1}}
如果您不打算重置数据库,请在下面发表评论。它变得非常棘手,正确的解决方案可能是更多的迁移或回滚来修复您的架构。
答案 1 :(得分:1)
添加迁移后,项目存在时始终需要迁移。因此,您只能添加迁移,而不能删除它们。如果您在迁移规则中出错,只需添加另一个shell还原或修复更改的规则。
请参考answer有关如何操作或重做迁移的信息,并确保在本地PC上传递从头开始重新初始化数据库,否则您需要修复迁移,然后才能进行shell迁移推进heroku。