我试图部署到heroku。首先,我推送到GIT和heroku(使用git push heroku
)。然后,我想迁移使用heroku run rake db:migrate
分贝,但迁移之后,部分地得到了以下错误消息:Heroku db迁移错误:PG :: DuplicateObject:错误:关系约束已经存在
-- add_foreign_key(:members, :organizations)
(16.5ms) ALTER TABLE "members" ADD CONSTRAINT "fk_rails_43c258b686"
FOREIGN KEY ("organization_id")
REFERENCES "organizations" ("id")
PG::DuplicateObject: ERROR: constraint "fk_rails_43c258b686" for relation "members" already exists
: ALTER TABLE "members" ADD CONSTRAINT "fk_rails_43c258b686"
FOREIGN KEY ("organization_id")
REFERENCES "organizations" ("id")
(1.2ms) ROLLBACK
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:
PG::DuplicateObject: ERROR: constraint "fk_rails_43c258b686" for relation "members" already exists
: ALTER TABLE "members" ADD CONSTRAINT "fk_rails_43c258b686"
FOREIGN KEY ("organization_id")
REFERENCES "organizations" ("id")
/app/vendor/bundle/ruby/2.1.0/gems/activerecord-4.2.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:155:in `async_exec'
/app/vendor/bundle/ruby/2.1.0/gems/activerecord-4.2.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:155:in `block in execute'
/app/vendor/bundle/ruby/2.1.0/gems/activerecord-4.2.1/lib/active_record/connection_adapters/abstract_adapter.rb:473:in `block in log'
...etc.
我没有数据松散,这样的尝试heroku pg:reset DATABASE
(也因为我已经与现有的迁移文件的磨砺而不是每次创建一个新的),然后heroku run rake db:migrate
但结果相同。
在开发中,运行rake db:migrate
功能正常(我也用bundle exec rake db:reset
来重置开发数据库)。我似乎没有遇到开发中的问题,所以它似乎是一个Heroku问题。有没有人有一个想法可能会导致这种情况?也许还有相关的:我正在使用Heroku的美洲狮服务器。
更新:一个迁移文件包含:
1 def change
2 create_table :members do |t|
3 t.references :organization, index: true, foreign_key: true
4 t.string :email, null: false
5 etc
6 t.timestamps null: false
7 end
8 add_foreign_key :members, :organizations
9 add_index :members, [:organization_id, :username]
10 end
是它也许行3和8是双?如果是这样,我应该删除什么?
我使用SQLite进行开发,并使用PostgreSQL(通过Heroku)进行部署。我正确地理解我可能在两次定义外键的迁移文件中?我在原始帖子中添加了更新。您是否可以确认更新中的其中一行应该被删除? – Nick
@Nick:(1)如果你打算部署其他的东西,停止在SQLite之上开发。 (2)'foreign_key:true'可能会创建FK,然后'add_foreign_key'尝试再次添加它。 –
是的,删除原始文章中更新的第8行解决了它。将做一些研究,以了解如何将开发中的SQLite切换到PostgeSQL。 – Nick