【发布时间】:2015-07-12 09:14:43
【问题描述】:
我正在尝试部署到 heroku。首先,我推送到 GIT 和 heroku(使用 git push heroku)。然后我想使用heroku run rake db:migrate 迁移数据库,但迁移后部分收到以下错误消息:
-- 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 的 puma 服务器。
更新:其中一个迁移文件包含:
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 行是双行的?如果是,我应该删除什么?
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-4 heroku database-migration