我試圖部署到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