Rails 5如何清除或删除生产postgres数据库

时间:2016-11-23 23:06:36

标签: ruby-on-rails ruby rake ruby-on-rails-5 rails-postgresql

我正在尝试删除生产数据库,以便我可以重新开始。当我从rails 4升级到rails 5时,它现在保护生产数据库免于意外删除。当我运行rake db:reset时,它会显示以下错误消息。

/app# rake db:reset
  ActiveRecord::SchemaMigration Load (1.8ms)  SELECT "schema_migrations".* FROM "schema_migrations"
   (1.6ms)  SELECT "ar_internal_metadata"."value" FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1  [["key", :environment]]
  ActiveRecord::SchemaMigration Load (0.2ms)  SELECT "schema_migrations".* FROM "schema_migrations"
   (0.3ms)  SELECT "ar_internal_metadata"."value" FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1  [["key", :environment]]
  ActiveRecord::SchemaMigration Load (0.3ms)  SELECT "schema_migrations".* FROM "schema_migrations"
   (0.2ms)  SELECT "ar_internal_metadata"."value" FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1  [["key", :environment]]
rake aborted!
ActiveRecord::ProtectedEnvironmentError: You are attempting to run a destructive action against your 'production' database.
If you are sure you want to continue, run the same command with the environment variable:
DISABLE_DATABASE_ENVIRONMENT_CHECK=1
/usr/local/bundle/gems/activerecord-5.0.0.1/lib/active_record/tasks/database_tasks.rb:51:in `check_protected_environments!'
/usr/local/bundle/gems/activerecord-5.0.0.1/lib/active_record/railties/databases.rake:11:in `block (2 levels) in <top (required)>'
/usr/local/bundle/gems/rake-11.3.0/exe/rake:27:in `<top (required)>'
Tasks: TOP => db:reset => db:drop => db:check_protected_environments
(See full trace by running task with --trace)

它说我将环境变量DISABLE_DATABASE_ENVIRONMENT_CHECK = 1添加到命令应该可以工作,但事实并非如此。我跑了它,什么也没做。

<606723-x9dh4:/app# DISABLE_DATABASE_ENVIRONMENT_CHECK=1 rake db:reset       
  ActiveRecord::SchemaMigration Load (1.6ms)  SELECT "schema_migrations".* FROM "schema_migrations"

任何人都知道我做错了什么?感谢帮助!

更新:

我的服务器是使用kubernetes部署的。我猜我无法重置数据库,因为服务器正在运行。

8 个答案:

答案 0 :(得分:26)

将生产数据库转储到本地时也会发生这种情况。如果要在本地计算机上删除它,则需要设置bin/rails db:environment:set RAILS_ENV=development,然后设置rake db:drop

答案 1 :(得分:25)

试试这个对我有用:

RAILS_ENV=production rake db:drop DISABLE_DATABASE_ENVIRONMENT_CHECK=1 

在一行中。

答案 2 :(得分:6)

来自Heroku在Running Rake commands上的文档:

  

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

因此,请尝试以下操作:

,而不是尝试railsrake db:reset

heroku pg:reset

答案 3 :(得分:1)

它不起作用但你应该运行这样的命令

 bundle exec rake RAILS_ENV=production db:drop DISABLE_DATABASE_ENVIRONMENT_CHECK=1

当你放下桌子时,你必须将它创建回来。所以如果你没有创建权利,你将会收到错误。这是你的asnwer Postgres permission denied to create database on rake db:create:all

当您键入psql时,键入\q即可从此处退出。

就像我说这不是答案,但我希望这会节省您的搜索时间。因为我现在就在那里。 GL&安培; HF

答案 4 :(得分:1)

好吧,即使这是一篇旧帖子,但为了将来参考,你可以做到

    rake db:migrate VERSION=0

然后

    rake db:migrate

答案 5 :(得分:1)

我知道,这可能会晚一点,但是,如果它无法通过标准轨道下降,那么您总是可以像使用psql一样 psql --u your_user

然后输入密码 键入\l以列出所有数据库。 在我的情况下,psql拒绝删除单个表,我创建了另外一个数据库,例如'testdb',键入了\c testdb与之建立连接,然后键入了drop database 'olddb_name';,然后键入了create database 'olddb_name';及其完成!

答案 6 :(得分:0)

你可以在下面拍摄吗?

[[!;;]

这是一种旧方法,但这是我用来将数据库重置为原始级别的方法。

答案 7 :(得分:0)

在生产环境中使用Rails 5.2应用程序和PostgreSQL数据库时,我遇到了同样的问题。

这是我的解决方法

首先,停止使用该数据库的每个会话,以避免出现database is being accessed by other users错误。

sudo kill -9 `ps -u postgres -o pid=`

此外,请注销与PGAdmin客户端上的数据库的每个连接。

启动PostgreSQL服务器,因为上面的kill操作停止了PostgreSQL服务器。

sudo systemctl start postgresql

在生产环境中拖放数据库,并附加生产参数。

rails db:drop RAILS_ENV=production DISABLE_DATABASE_ENVIRONMENT_CHECK=1

在生产环境中创建数据库,并附加生产参数。

rails db:create RAILS_ENV=production

仅此而已。

我希望这会有所帮助