【问题标题】:Running rake db:drop db:create db:migrate on Heroku Cedar stack在 Heroku Cedar 堆栈上运行 rake db:drop db:create db:migrate
【发布时间】:2011-12-31 00:52:30
【问题描述】:

当我尝试运行时:

heroku run rake db:drop db:create db:migrate

我得到错误:

Running rake db:drop attached to terminal... up, run.5
Couldn't drop adsfsadfas : #<ActiveRecord::StatementInvalid: PGError: ERROR:  must be owner of database adsfsadfas
: DROP DATABASE IF EXISTS "adsfsadfas">

我在 Heroku Cedar 堆栈上。我可以在 Heroku 上删除数据库吗?

谢谢!

约翰

【问题讨论】:

标签: ruby-on-rails heroku rake cedar


【解决方案1】:

不支持 rake db:reset 任务。 Heroku 应用程序无权删除和创建数据库。请改用heroku pg:reset 命令。

【讨论】:

  • 是的,您需要输入heroku pg:reset SHARED_DATABASE,然后在提示时输入您的应用名称
  • 现在已更改为 heroku pg:reset DATABASE_URL --confirm nameofapp - ymmv
  • 请注意(现在已弃用)Heroku gem,heroku pg:reset DATABASE_URL 也会删除您的架构,尽管heroku help pg 文档指示“删除数据库中的所有数据”。不过,在 OP 的情况下,这就是我们想要的 (rake db:drop)。
  • Joshua Schmid 指出你可能还需要运行:heroku run rake db:schema:load
  • heroku pg:reset 然后是heroku run rake db:migrate(以及可选的db:fixtures:load,因为那是我的登台环境)
【解决方案2】:

heroku 上不允许使用直接破坏性命令(dropcreate)。但是,如果您可以丢失所有数据,您可以使用pg:reset 重置数据库。

heroku pg:reset DATABASE_URL

所有其他更改都应使用db:migrate 完成。这保证了数据库状态的一致性。


如果您的迁移不再通过完整堆栈运行,您可以使用db:schema:load。这会直接从 schema.rb 加载模式。但请注意,如果create_table 使用参数force: trueforce: :cascade,这也可能具有破坏性。

heroku run rake db:schema:load

【讨论】:

    猜你喜欢
    • 2012-06-14
    • 2012-11-23
    • 2016-03-05
    • 1970-01-01
    • 2012-02-05
    • 2011-12-08
    • 1970-01-01
    • 2013-03-08
    • 2017-07-30
    相关资源
    最近更新 更多