在Heroku Cedar堆栈上运行rake db:drop db:create db:migrate

34
当我尝试运行时:
heroku run rake db:drop db:create db:migrate

I get the error:

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上删除数据库吗?
谢谢!
约翰

这里是最新的答案:https://dev59.com/VGrXa4cB1Zd3GeqPCcKd#13347768 - Fellow Stranger
2个回答

52
任务不受支持。Heroku 应用程序无权删除和创建数据库。请使用heroku pg:reset命令代替。


4
是的,您需要输入 heroku pg:reset SHARED_DATABASE 然后在提示时输入您的应用程序名称。 - stephenmurdoch
20
现在这个命令已经变成了 heroku pg:reset DATABASE_URL --confirm nameofapp,但是结果可能因人而异。 - stephenmurdoch
请注意,使用现在已弃用的Heroku gem时,“heroku pg:reset DATABASE_URL”将删除您的模式,尽管“heroku help pg”文档指示“删除数据库中的所有数据”。不过,在OP的情况下,这正是所需的(rake db:drop)。 - Richard Michael
Joshua Schmid指出,您可能还需要运行:heroku run rake db:schema:load。 - jasonleonhard
heroku pg:reset 然后 heroku run rake db:migrate(可选地,因为这是我的分段环境) - Dorian

13

在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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接