Heroku / Rails:PG :: Undefined Table:错误“[tablename]”在heroku rails迁移上不存在
Posted
技术标签:
【中文标题】Heroku / Rails:PG :: Undefined Table:错误“[tablename]”在heroku rails迁移上不存在【英文标题】:Heroku/Rails: PG:: Undefined Table: error "[tablename]" does not exist on heroku rails migration 【发布时间】:2016-09-04 19:04:27 【问题描述】:我的应用在生产环境中运行良好,但是当我转移到生产环境并运行“heroku run rake db:migrate”时,我收到以下错误:
PG::UndefinedTable: ERROR: table "applications" does not exist
Migrating to DropApplications (20160509013805)
(0.8ms) BEGIN
== 20160509013805 DropApplications: migrating =================================
-- drop_table(:applications)
(1.1ms) DROP TABLE "applications"
(0.5ms) ROLLBACK
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:
PG::UndefinedTable: ERROR: table "applications" does not exist
: DROP TABLE "applications"
但是,我的数据库中有一个“应用程序”表。下降可能与前几天我下降然后重新制作应用程序支架有关。我该如何解决这个问题?
create_table "applications", force: :cascade do |t|
t.string "name"
t.string "gender"
t.date "date_of_birth"
t.string "gpa"
t.text "essay"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
所以当我运行 run rake:db setup 时,我会看到以下结果:
Status Migration ID Migration Name
--------------------------------------------------
up 20160505200754 ********** NO FILE **********
up 20160508234634 Create users
up 20160508234945 Add devise to users
up 20160509013805 ********** NO FILE **********
up 20160509014328 ********** NO FILE **********
20160509014911 Create applications
我试图删除“创建应用程序”之前的两个。所以,我尝试像这样耙heroku db: $ heroku run rake --trace db:migrate VERSION=20151127134901 但我仍然收到“删除表”的错误 - 它试图进行 20160509013805 迁移。如何在它说没有文件的地方完全删除那些迁移,这样它也不会尝试耙那些?提前谢谢你。
【问题讨论】:
这有帮助吗? ***.com/a/34321825/981616 这有助于并让我走上正轨……我想。我刚刚更新了原始帖子,如果可以的话,请看一下 添加了答案,请检查并告诉我。 【参考方案1】:我遇到了这个问题,但我只需要运行 heroku run rake db:migrate
,因为自从上次推送到 Heroku 后我已经更改了我的数据库。
【讨论】:
【参考方案2】:重置heroku db:
Heroku 不允许删除 db。相反,您应该使用heroku pg:reset
。此命令需要您指定heroku pg:info,
可以找到的DATABASE,然后您将获得如下输出:
=== DATABASE_URL
Plan: Hobby-dev
Status: Available
Connections: 0/20
PG Version: 9.4.4
Created: 2015-10-11 23:14 UTC
Data Size: 6.7 MB
Tables: 5
Rows: 0/10000 (In compliance)
Fork/Follow: Unsupported
Rollback: Unsupported
Add-on: postgresql-cubed-1838
一旦你得到像上面这样的输出,使用 heroku pg:reset 命令并附加“附加”字段值。示例我会这样做:
$ heroku pg:reset postgresql-cubed-1838
【讨论】:
【参考方案3】:您的迁移文件可能存在问题。如果您删除了一个但另一个相应的文件仍然存在,则可能会导致此错误。我会发表评论,但我还没有声誉。
【讨论】:
那些是孤立的迁移。要解决它,您可以删除您的db/migrate/
文件夹(不要删除 schema.rb)并运行 rake db:schema:load
或 rake db:setup
。或者有一个宝石,但我从未尝试过:github.com/jalkoby/squasher 您也可以检查这个 SO 问题:***.com/questions/16041790/…
实际上你的孤立迁移问题现在已经解决了。但是您没有有权创建数据库的用户。 PG 设置不正确,无法继续。根据您的环境,不同解决方案的常见问题是,如果需要,您可能必须向database.yml
提供您的用户名和密码(将其隐藏在环境变量中)。有关解决方案示例,请参阅 ***.com/questions/11919391/… 和 ***.com/questions/17633422/…。
好的,所以我重新安装了 postgresl,但它仍然说该角色不存在。如何创建新角色?然后如果我在我的计算机上创建一个新角色,我是否会将它放在我的 database.yml 文件中?
您应该在database.yml
中为您的数据库添加一个“用户名”行。至于创建用户,这取决于你是在 Mac,Windows 上......我鼓励你浏览 SO,有可靠的答案。在您的机器上设置 pg 是一项重要任务,您可能还需要调整更多配置。
好的,我使用您所关注的链接更改了 postgresql 密码,现在我又回到了第一阶段,遇到了推送到 heroku 的麻烦(说已删除的迁移不存在),这比在我什至无法进行生产之前。我会继续工作。谢谢!以上是关于Heroku / Rails:PG :: Undefined Table:错误“[tablename]”在heroku rails迁移上不存在的主要内容,如果未能解决你的问题,请参考以下文章
出现错误 - PG::UndefinedColumn(错误:使用 postgres 版本 13.3 的 heroku 上不存在列 d.adsrc
PG::UndefinedTable: 错误: 关系“...”不存在
AWS Elastic Beanstalk 和 rails:pg_restore: [archiver] 文件头中不支持的版本 (1.13)