gpt4 book ai didi

ruby-on-rails - 无法在 Heroku 上创建表——迁移在本地工作但在 Heroku 上失败

转载 作者:行者123 更新时间:2023-11-29 13:02:58 29 4
gpt4 key购买 nike

我正在开发 Rails 3 应用程序并尝试运行迁移。我正在尝试创建一个名为 Songs 的表,我能够成功创建该表并在本地迁移。但是,当我将代码推送到 Heroku 并迁移到那里时,我遇到的错误是:

** Execute db:migrate
== CreateSongs: migrating ====================================================
-- create_table(:songs)
NOTICE: CREATE TABLE will create implicit sequence "songs_id_seq1" for serial column "songs.id"
rake aborted!
An error has occurred, this and all later migrations canceled:

PG::DuplicateTable: ERROR: relation "songs" already exists
: CREATE TABLE "songs" ("id" serial primary key, "solo_cello" character varying(255), "created_at" timestamp, "updated_at" timestamp) /app/vendor/bundle/ruby/1.9.1/gems/activerecord-3.1.12/lib/active_record/connection_adapters/postgresql_adapter.rb:605:in `async_exec'

我意识到这个错误源于数据库中已经存在的表,但是当我运行时

 heroku run "bundle exec rake db:schema:dump && cat db/schema.rb" 

我看到架构版本位于 ActiveRecord::Schema.define(:version => 20130915155113) 并且创建 Songs 模型的迁移发生在该迁移之后(它是 2014050604381​​7)。

这是我的本地模式的截断版本:

 ActiveRecord::Schema.define(:version => 20140511155456) do
[other tables...]
create_table "songs", :force => true do |t|
t.string "solo_cello"
t.datetime "created_at"
t.datetime "updated_at"
t.string "solo_violin"
t.string "duo_one"
t.string "duo_two"
t.string "trio_a_one"
t.string "trio_a_two"
t.string "trio_a_three"
t.string "trio_b_one"
t.string "trio_b_two"
t.string "trio_b_three"
t.string "quartet_one"
t.string "quartet_two"
t.string "quartet_three"
t.string "quartet_four"
end

这是我的问题:

  1. 如果创建 Song 表(2014050604381​​7)的迁移来得晚,如果数据库上的 schema 版本为 20130915155113,表如何已经存在?

  2. 要运行成功的迁移,我需要做什么?我意识到我可以删除数据库(这是暂存环境),但非常不希望在生产环境中这样做。

  3. 为什么迁移在我的本地机器上工作正常,但在 Heroku 上却不行?

最佳答案

听起来您的歌曲表可能因恢复数据库备份而被遗忘。在 Heroku 上恢复数据库备份只会重写备份中存在的表,但不会删除创建备份时尚不存在的表。

要解决这个问题,需要遵循几个步骤:

  1. 放下 table 。您可以通过运行 heroku pg:psql 手动删除表在终端中,然后执行查询 DROP TABLE songs;。如果这是唯一有问题的表,您现在可以运行迁移。

  2. 删除数据库。如果您有数据库备份并且可以承受一些停机时间,您也可以通过运行 heroku pg:reset 来删除数据库。从终端,然后 restoring your database backup并运行您的迁移。

关于ruby-on-rails - 无法在 Heroku 上创建表——迁移在本地工作但在 Heroku 上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23595233/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com