【问题标题】:Heroku rake db:migrate does not create tables (Rails 5)Heroku rake db:migrate 不创建表(Rails 5)
【发布时间】:2020-01-26 02:22:14
【问题描述】:

我有一个 Rails 5 应用程序,我想销毁并重建我的实时数据库(站点尚未启动)。 所以我遵循了应该有效的步骤(他们过去曾经有效):

  1. heroku pg:reset HEROKU_POSTGRESQL_HEROKUCOLOR_URL --确认 {app_name}
  2. heroku 运行 rake db:migrate
  3. heroku 运行 rake db:seed

步骤 1 和 2 成功完成,步骤 3 失败并出现错误('adminsettings' 是我的表之一):

Running rake db:seed on {app_name}... starting, run.7198 (Hobby)
Running rake db:seed on {app_name}... connecting, run.7198 (Hobby)
Running rake db:seed on {app_name}... up, run.7198 (Hobby)
rake aborted!
ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR:  relation "adminsettings" does not exist
LINE 8:                WHERE a.attrelid = '"adminsettings"'::regclas...

如果我运行 heroku pg:info 它返回我有 2 个表(我应该有大约 10 个),所以就好像第 2 步失败了(即使没有错误)。 如果我检查 pgAdmin4,我只能看到 2 个表:ar_internal_metadata 和 schema_migrations,它们不是我的自定义表。

在确保它们位于我的 schema.rb 文件中之后,我删除了所有迁移,因此实际上不需要迁移 - 只是创建表。所以我的第一个问题是:(应该!)“heroku rake db:migrate”是否只使用 schema.rb 文件来构建表?

这是一个 Rails 5.2.2 应用程序,但它最初是 Rails 4.x 应用程序,我升级了所有的 gem。这会是某种原因吗?到目前为止没有任何问题,除非我尝试了这种破坏性的重建。 否则,我没有想法。而且我对出了什么问题没有太多的调试可见性。

【问题讨论】:

    标签: heroku ruby-on-rails-5 rake psql


    【解决方案1】:

    rake db:migrate 不会加载 schema.rb 文件。它只会运行迁移。如果你想加载架构,那么你可以使用rake db:schema:load

    如果您恢复迁移以再次运行,您可能还需要小心,因为schema_migrations 表可能已经记录了所有已运行的迁移。您还需要清除该表(删除记录 - 而不是删除该表)以指示您的迁移应该再次运行。

    【讨论】:

    • 完美建议!所以运行“heroku run rake db:schema:load”正确地创建了表,然后“heroku run rake db:seed”随后运行良好。所以我的步骤应该是: - 1. heroku pg:reset HEROKU_POSTGRESQL_HEROKUCOLOR_URL --confirm {app_name} 2. heroku run rake db:schema:load 3. heroku run rake db:migrate 4. heroku run rake db:seed
    • 看起来这回答了你的问题。伟大的!对解决您的问题的答案的适当响应是通过单击复选标记来接受它。这标志着您的问题在数据库中已解决,并大大提高了将来帮助其他用户的机会。
    猜你喜欢
    • 2017-02-28
    • 2018-01-12
    • 2016-11-19
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 2016-03-08
    • 2014-07-10
    • 1970-01-01
    相关资源
    最近更新 更多