it-swarm.com.ru

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"

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

Обновление:

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

14
Scott B

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

Rails_ENV=production rake db:drop DISABLE_DATABASE_ENVIRONMENT_CHECK=1 

в одной строке.

20
Prashant

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

24
yozzz

Из документации Heroku о Запуск команд Rake :

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

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

heroku pg:reset

6
Kostas Rousis

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

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

1
Nickolay Efimov

Ну, хотя это старый пост, но для дальнейшего использования, вы можете сделать 

    rake db:migrate VERSION=0

А потом

    rake db:migrate
1
Marshall

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

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

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

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

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

1
user6163002

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

Rails_ENV=production rake db:drop
Rails_ENV=production rake db:create

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

0
marahin