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" = $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"

Кто-нибудь знает, что я делаю не так? Цените помощь!

ОБНОВИТЬ:

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


person Scott B    schedule 23.11.2016    source источник
comment
Можете ли вы попробовать использовать рельсы вместо граблей, например RAILS_ENV=production DISABLE_DATABASE_ENVIRONMENT_CHECK=1 bin/rails db:reset   -  person neydroid    schedule 24.11.2016
comment
Не повезло, просто делает то же самое.   -  person Scott B    schedule 24.11.2016


Ответы (8)


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

RAILS_ENV=production rake db:drop DISABLE_DATABASE_ENVIRONMENT_CHECK=1 

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

person Prashant    schedule 12.12.2016

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

person yozzz    schedule 21.11.2017
comment
Это правильный способ сделать это после импорта производственной базы данных в среду разработки. - person iGEL; 21.12.2020
comment
Спасибо тебе за это. Недавно я впервые использовал свою продукцию 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) - person Robert Travis Pierce; 05.03.2021

Из документации Heroku по Выполнение команд Rake:

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

Поэтому вместо того, чтобы пытаться получить rails или rake db:reset, попробуйте следующее:

heroku pg:reset

person Kostas Rousis    schedule 24.09.2017
comment
Только что заметил, что название не включает Heroku, но это то, что я искал! - person karns; 17.01.2020

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

    rake db:migrate VERSION=0

А потом

    rake db:migrate
person Marshall    schedule 11.07.2017
comment
да, это путь, если вы не отключите свою базу данных и можете откатить свои миграции - person hatenine; 05.02.2019

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

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

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

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

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

person Community    schedule 27.01.2017

Я знаю, это может быть немного поздно, но, если он не упадет со стандартными рельсами, вы всегда можете использовать psql, например psql --u your_user

затем введите пароль типа \l, чтобы вывести список всех db. в моем случае psql отклоняет удаление одной таблицы, и я создаю дополнительную базу данных, например testdb, набираю \c testdb, чтобы установить с ней соединение, затем набираю drop database 'olddb_name';, затем create database 'olddb_name'; и готово!

person Nickolay Efimov    schedule 23.01.2019

Можете ли вы дать шанс ниже?

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

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

person marahin    schedule 27.11.2016

У меня была такая же проблема при работе с приложением Rails 5.2 и базой данных PostgreSQL в производственной среде.

Вот как я это решил:

Во-первых, останавливайте каждый сеанс с использованием базы данных, чтобы избежать ошибки доступа к базе данных другими пользователями.

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

Кроме того, выходите из каждого подключения к базе данных на клиенте PGAdmin, если таковой имеется.

Запустите сервер PostgreSQL, поскольку описанная выше операция уничтожения остановила сервер PostgreSQL.

sudo systemctl start postgresql

Отбросьте базу данных в производственной среде, добавив производственные аргументы.

rails db:drop RAILS_ENV=production DISABLE_DATABASE_ENVIRONMENT_CHECK=1

Создайте базу данных в производственной среде, добавив производственные аргументы.

rails db:create RAILS_ENV=production

Это все.

Надеюсь, это поможет

person Promise Preston    schedule 07.02.2020