web-dev-qa-db-fra.com

Rails 5 comment effacer ou supprimer la base de données postgres de production

J'essaie de supprimer une base de données de production pour pouvoir recommencer à zéro. Lorsque j'ai mis à niveau Rails 5 à partir de Rails 4, la protection de la base de données de production est maintenant protégée contre la suppression accidentelle. Il affiche le message d'erreur suivant lorsque j'exécute 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)

Cela dit que l'ajout de la variable d'environnement DISABLE_DATABASE_ENVIRONMENT_CHECK = 1 à la commande devrait fonctionner, mais cela ne fonctionne pas. Je le lance et ça ne fait rien.

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

Quelqu'un sait ce que je fais mal? Appréciez l'aide!

METTRE À JOUR:

Mon serveur est déployé à l'aide de kubernetes. Je suppose que je ne peux pas réinitialiser la base de données car le serveur est en cours d'exécution.

14
Scott B

Essayez ceci cela a fonctionné pour moi:

Rails_ENV=production rake db:drop DISABLE_DATABASE_ENVIRONMENT_CHECK=1 

en une seule ligne.

20
Prashant

Cela se produit également lorsque vous videz la base de données de production en local. Si vous souhaitez le supprimer sur une machine locale, vous devez définir bin/Rails db:environment:set Rails_ENV=development et après rake db:drop.

24
yozzz

De la documentation de Heroku sur Exécuter des commandes Rake :

La tâche db: reset n'est pas prise en charge. Les applications Heroku ne sont pas autorisées à supprimer et à créer des bases de données. Utilisez plutôt la commande heroku pg: reset.

Au lieu d'essayer d'avoir Rails ou rake db:reset, essayez ceci:

heroku pg:reset

6
Kostas Rousis

je sais, cela pourrait être un peu en retard, mais, si elle ne parvient pas à tomber de manière standard, vous pouvez toujours utiliser psql comme psql --u your_user

puis entrez le mot de passe tapez \l pour répertorier toutes les bases de données . dans mon cas, psql refuse de supprimer une seule table, et je crée une base de données supplémentaire, comme 'testdb', tapé \c testdb pour établir la connexion avec elle, puis tapez drop database 'olddb_name';, alors create database 'olddb_name'; et c'est fait!

1
Nickolay Efimov

Eh bien, même s’il s’agit d’un ancien post, mais pour référence future, vous pouvez le faire 

    rake db:migrate VERSION=0

Et alors

    rake db:migrate
1
Marshall

Cela ne fonctionne pas mais vous devriez exécuter des commandes comme celle-ci

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

et lorsque vous supprimez la table, vous devez la créer. Ainsi, vous obtiendrez une erreur si vous ne possédez pas les droits sur createdb.Here votre asnwer permission refusée de créer une base de données sur rake db: create: all

lorsque vous tapez psql, vous en sortez en tapant \q

Comme je l’ai dit, ce n’est pas la solution, mais j’espère que cela vous fera gagner du temps pendant vos recherches. Beacuse je suis là en ce moment. GL HF

1
user6163002

Pouvez-vous donner ci-dessous un coup de feu?

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

C’est une méthode ancienne, mais c’est comme cela que j’ai utilisé pour réinitialiser la base de données à un niveau parfait.

0
marahin