【问题标题】:Rails 5 how to clear or delete production postgres databaseRails 5如何清除或删除生产postgres数据库
【发布时间】:2016-11-23 23:06:35
【问题描述】:

我正在尝试删除生产数据库,以便重新开始。当我从 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 部署的。我猜我无法重置数据库,因为服务器正在运行。

【问题讨论】:

  • 你能不能像RAILS_ENV=production DISABLE_DATABASE_ENVIRONMENT_CHECK=1 bin/rails db:reset那样用rails代替rake
  • 不走运,只是做同样的事情。

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


【解决方案1】:

试试这个它对我有用:

RAILS_ENV=production rake db:drop DISABLE_DATABASE_ENVIRONMENT_CHECK=1 

在一行中。

【讨论】:

  • 有没有办法将它添加到本地环境的配置文件中,这样我们就不需要每次都在终端中编写它?
【解决方案2】:

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

【讨论】:

  • 这是在将生产数据库导入开发环境后执行此操作的正确方法。
  • 谢谢你。我最近第一次在开发中使用了我的 heroku 产品 (heroku pg:pull DATABASE_URL my_app_name --app my_app_name --remote production),但我没有意识到我必须改变我放弃它的方式。 (rails db:environment:set RAILS_ENV=development; rails db:drop)
【解决方案3】:

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

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

所以不要尝试使用railsrake db:reset,试试这个:

heroku pg:reset

【讨论】:

  • 刚刚注意到标题不包括 Heroku,但这正是我要找的!
【解决方案4】:

好吧,虽然这是一个老帖子,但为了将来参考,你可以这样做

    rake db:migrate VERSION=0

然后

    rake db:migrate

【讨论】:

  • 是的,如果你不断开你的数据库并且可以回滚你的迁移,这就是要走的路
  • 工作就像一个魅力 - 迁移回我的数据库到时间的开始,重新部署我的代码,然后自动迁移到最新的架构
【解决方案5】:

它不工作,但你应该运行这样的命令

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

当您删除表时,您必须重新创建它。因此,如果您没有 createdb 的权限,您将收到错误。这里是您的 asnwer Postgres permission denied to create database on rake db:create:all

当您输入psql 时,您可以通过输入\q 退出。

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

【讨论】:

    【解决方案6】:

    我知道,这可能有点晚了,但是,如果它不能以标准的 Rails 方式下降,你总是可以使用 psql 之类的 psql --u your_user

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

    【讨论】:

      【解决方案7】:

      你能在下面试一试吗?

      RAILS_ENV=production rake db:drop
      RAILS_ENV=production rake db:create
      

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

      【讨论】:

        【解决方案8】:

        在生产环境中使用 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
        

        就是这样。

        我希望这会有所帮助

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-12-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-06-12
          • 2016-09-27
          • 1970-01-01
          • 2011-10-17
          相关资源
          最近更新 更多