Rails 5 Как очистить или удалить производственную базу данных postgres

Я пытаюсь удалить производственную базу данных, чтобы начать все заново. Когда я обновился до rails 5 из rails 4, теперь он защищает производственную базу данных от случайного удаления. Он показывает следующее сообщение об ошибке при запуске 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" =   [["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" =   [["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" =   [["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. Я предполагаю, что я не могу сбросить базу данных, потому что сервер работает.

6 ответов


попробуйте это сработало для меня:

RAILS_ENV=production rake db:drop DISABLE_DATABASE_ENVIRONMENT_CHECK=1 

в одну строку.


это также происходит, когда вы сбрасываете производственную базу данных в локальную. Если вы хотите удалить его на локальном компьютере, вам нужно будет установить bin/rails db:environment:set RAILS_ENV=development, и после rake db:drop


из документации Heroku на запуск команды грабли:

задача db: reset не поддерживается. Приложения в Heroku не имеют разрешения на удаление и создание баз данных. Вместо этого используйте команду heroku pg:reset.

поэтому вместо того, чтобы rails или rake db:reset, попробуйте это:

heroku pg:reset


можете ли вы дать ниже выстрел?

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

Это старый метод, но именно так я использовал для сброса базы данных на первозданный уровень.


Он не работает, но вы должны запускать команды, как это

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

и когда вы отбрасываете таблицу, вы должны создать ее обратно.Таким образом, вы получите ошибку, если у вас нет прав на createdb.Вот ваша ответ разрешение Postgres отказано в создании базы данных на rake db: create: all

при вводе psql вы выходите оттуда, набрав \q.

как я уже сказал, это не ответ, но надеюсь, это сэкономит ваше время, пока вы испытующий. Потому что я сейчас здесь. GL & HF


ну, хотя это старый пост, но на будущее, вы можете сделать

    rake db:migrate VERSION=0

а то

    rake db:migrate