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.
Essayez ceci cela a fonctionné pour moi:
Rails_ENV=production rake db:drop DISABLE_DATABASE_ENVIRONMENT_CHECK=1
en une seule ligne.
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
.
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
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!
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
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
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.