【发布时间】:2011-06-16 18:33:28
【问题描述】:
我正在 Heroku 上开发一个 Ruby on Rails 3 webapp。如何清空数据库?
【问题讨论】:
我正在 Heroku 上开发一个 Ruby on Rails 3 webapp。如何清空数据库?
【问题讨论】:
要删除数据库,如果您使用的是SHARED_DATABASE_URL:
$ heroku pg:reset DATABASE_URL
现在重新创建没有任何内容的数据库:
$ heroku run rake db:migrate
使用您的种子数据填充数据库:
$ heroku run rake db:seed
---或---
您可以通过执行以下操作将最后两个 (migrate & seed) 合并为一个操作:
$ heroku run rake db:setup
编辑 2014-04-18:rake db:setup 不适用于 Rails 4,它会因 Couldn't create database error 而失败。
编辑 2014-10-09:您可以将rake db:setup 与Rails 4 一起使用。它确实会给您一个Couldn't create database 错误(因为已经使用heroku pg:reset 命令创建了数据库) .但它也会在出现错误消息后加载您的数据库架构和种子。
您几乎可以使用任何 rake 命令来执行此操作,但也有例外。例如,db:reset 不能通过 heroku run rake 工作。您必须改用pg:reset。
更多信息可以在 Heroku 的文档中找到:
【讨论】:
SHARED_DATABASE_URL is deprecated, please use SHARED_DATABASE
heroku pg:reset DATABASE
heroku pg:reset DATABASE --confirm appname
Heroku 现在已弃用 --db 选项,所以现在使用:
heroku pg:reset DATABASE_URL --confirm {the name of your app}
这有点令人困惑,因为您使用文字文本 SHARED_DATABASE 但我写的 {the name of your app} 替换了您的应用程序的名称。例如,如果您的应用名为 my_great_app,那么您使用:
heroku pg:reset DATABASE_URL --confirm my_great_app
【讨论】:
SHARED_DATABASE
删除数据库:
$ heroku pg:reset SHARED_DATABASE --confirm NAME_OF_THE_APP
重新创建数据库:
$ heroku run rake db:migrate
为数据库播种:
$ heroku run rake db:seed
**最后一步
$ heroku restart
【讨论】:
heroku run rake db:migrate 不再重新创建数据库
当前,即。 2017 年的做法是:
heroku pg:reset DATABASE
https://devcenter.heroku.com/articles/heroku-postgresql#pg-reset
【讨论】:
heroku run rake db:migrate db:seed
现在命令是
heroku pg:reset DATABASE_URL --confirm your_app_name
通过这种方式,您可以指定要重置的应用程序的数据库。 然后就可以运行了
heroku run rake db:migrate
heroku run rake db:seed
或直接用于上述两个命令
heroku run rake db:setup
现在是重启应用的最后一步
heroku restart
【讨论】:
我联系了 Heroku 支持,他们确认这是最新 gem 的错误(我使用的是 heroku-2.26.2)
Charlie - 我们知道 'heroku' gem 的这个问题,并且 正在努力修复它。
如果您愿意跟进,问题就来了 - https://github.com/heroku/heroku/issues/356
降级到早期版本的“heroku”gem 应该会有所帮助。我今天大部分时间都在使用 v2.25.0 没有问题。
使用以下命令降级:
gem uninstall heroku
gem install heroku --version 2.25.0
如果您已经安装了多个 gem,您可能会看到:
Select gem to uninstall: 1. heroku-2.25.0 2. heroku-2.26.2 3. All versions
只需卸载 #2 并重新运行该命令。快乐!
【讨论】:
完整答案是(对于拥有多数据库的用户):
heroku pg:info - 输出
=== HEROKU_POSTGRESQL_RED 基本计划
可用状态
heroku pg:reset HEROKU_POSTGRESQL_RED --confirm app_name
更多信息见:https://devcenter.heroku.com/articles/heroku-postgresql
【讨论】:
现在它与heroku不同。尝试: heroku pg:reset DATABASE --confirm
【讨论】:
【讨论】:
今天的命令
heroku pg:reset --db SHARED_DATABASE_URL
不适用于共享计划,我正在使用
heroku pg:reset SHARED_DATABASE
【讨论】:
检查您的 heroku 版本。我刚刚更新到2.29.0,如下:
heroku --version
#=> heroku-gem/2.29.0 (x86_64-linux) ruby/1.9.3
现在你可以运行了:
heroku pg:reset DATABASE --confirm YOUR_APP_NAME
然后在一个命令中创建您的数据库并为其播种:
heroku run rake db:setup
现在重新启动并尝试您的应用:
heroku restart
heroku open
【讨论】:
使用登录到您的数据库
heroku pg:psql 并输入以下命令:
drop schema public cascade;
create schema public;
【讨论】:
如果您更喜欢使用 Heroku 网站:
【讨论】:
这对我有用。
1.清除数据库。
heroku pg:reset --app YOUR_APP
运行后,您必须再次输入您的应用名称以确认。
2.migrate db 重新创建。
heroku run rake db:migrate --app YOUR_APP
3.将种子数据添加到数据库。
heroku run rake db:seed --app YOUR_APP
【讨论】:
假设您要重置 PostgreSQL 数据库并将其备份,请使用:
heroku apps
列出您在 Heroku 上的应用程序。找到您当前应用程序的名称 (application_name)。然后运行
heroku config | grep POSTGRESQL
获取数据库的名称。一个例子可以是
HEROKU_POSTGRESQL_WHITE_URL
最后,给定application_name 和database_url,你应该运行
heroku pg:reset `database_url` --confirm `application_name`
heroku run rake db:migrate
heroku restart
【讨论】:
如果您从控制台登录,这将在最新的 heroku 工具带中完成这项工作,
heroku pg:reset --confirm 数据库名称
【讨论】:
我总是使用单行“heroku pg:reset DATABASE”来做到这一点。
【讨论】:
您的问题的最佳解决方案将是
heroku pg:reset -r heroku --confirm your_heroku_app_name
--确认你的_heroku_app_name
不是必需的,但终端总是要求我执行该命令。
执行该命令后,您将拥有纯 db,没有结构和东西,之后您可以运行
heroku run rake db:schema:load -r heroku
或
heroku run rake db:migrate -r heroku
【讨论】: