【问题标题】:Postgres db not working on HerokuPostgres db 无法在 Heroku 上运行
【发布时间】:2018-10-17 18:45:42
【问题描述】:

我已经花费了几个小时来弄清楚如何启动和运行我的数据库。我创建了一个新的 rails 应用程序并想将其部署到 heroku。我按照 heroku 的说明(从 sqlite3 -> postgresql 切换),但它不起作用。

这是在我的 database.yml 文件中:

default: &default
  adapter: postgresql
  pool: 5
  timeout: 5000

development:
  <<: *default
  database: myapp_development

test:
  <<: *default
  database: myapp_test

production:
  <<: *default
  database: myapp_production
  url: <%= ENV['DATABASE_URL'] %>

我无法在数据库中创建或播种任何数据。有时它会执行 db:migrate,但即便如此它也不会创建任何东西。这是我运行时得到的:

heroku run rake db:create

FATAL: permission denied for database "postgres"
DETAIL: User does not have CONNECT privilege.

有没有人知道如何解决这个问题?我已经没有线索了......

谢谢!

【问题讨论】:

  • 在您的 Heroku 仪表板中。资源 -> 插件。您是否添加了 Heroku Postgres :: 数据库插件?
  • 是的,我添加了 Postgres 插件!
  • 您是否选择了网络 Dyno(免费的就可以)并激活它?
  • 是的。我通过在 heroku 上重新添加 Postgres 插件找到了解决方案。现在它工作正常。感谢您的帮助!

标签: ruby-on-rails ruby postgresql sqlite heroku


【解决方案1】:

您不能使用 db:create 在 Heroku 上创建数据库(也不能删除它)。您的数据库是在您添加附加组件(例如 Heroku Postgres)时创建的。您只能迁移和播种。如果你想重新开始,你可以使用 pg:reset (而不是 drop 和 create)

所以正确的顺序应该是:

如果你想重新开始

  • rake pg:reset
  • rake db:迁移
  • 耙分贝:种子

来自 Heroku 文档:https://devcenter.heroku.com/articles/heroku-postgresql

分配给您的数据库的 PostgreSQL 用户没有创建或删除数据库的权限。要删除并重新创建数据库,请使用 pg:reset。

【讨论】:

  • 谢谢,我重新添加了 postgres 插件,现在可以正常使用了!干杯
【解决方案2】:

默认情况下,您不需要在heroku 上创建数据库。 只需运行heroku run rails db:migrate,其余内容将由heroku 自己处理。

您的database.yml 也应更改为Production 环境的以下内容。

production:
  <<: *default
  database: myapp_production
  username: myapp
  password: <%= ENV['MYAPP_DATABASE_PASSWORD'] %>

此外,您的 rails 应用程序默认分配有 Postgres addon。 您可以通过在控制台中运行命令heroku addons 来检查这一点。

来源 -

  1. Heroku Getting Started Guide
  2. Heroku Postgres Addon Guide

【讨论】:

    【解决方案3】:

    根据给定的堆栈跟踪,您似乎正在尝试在 heroku 上创建一个数据库,这反过来又给您带来了 Permission Denied Error。

    首先,你不需要运行

    heroku run rake db:create
    

    改为运行

    heroku run rake db:migrate
    

    它应该迁移已关闭的迁移。

    要检查迁移的当前状态,请运行以下命令:

    heroku run rake db:migrate:status
    

    你提到的其他观点:

    -> 我无法在数据库中创建或播种任何数据 正如上面已经提到的,你不能像 heroku 那样创建数据库。 要在数据库中播种数据,请运行以下命令:

    heroku run rake db:seed
    

    【讨论】:

      猜你喜欢
      • 2022-08-19
      • 2021-09-25
      • 1970-01-01
      • 2020-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-15
      • 2014-05-05
      相关资源
      最近更新 更多