Ich versuche, eine Produktionsdatenbank zu löschen, damit ich neu beginnen kann. Beim Upgrade von Rails 4 auf Rails 5 wird die Produktionsdatenbank jetzt vor versehentlichem Löschen geschützt. Beim Ausführen von rake db:reset
wird folgende Fehlermeldung angezeigt.
/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)
Es besagt, dass das Hinzufügen der Umgebungsvariablen DISABLE_DATABASE_ENVIRONMENT_CHECK = 1 zum Befehl funktionieren sollte, dies jedoch nicht. Ich lasse es laufen und es tut nichts.
<606723-x9dh4:/app# DISABLE_DATABASE_ENVIRONMENT_CHECK=1 rake db:reset
ActiveRecord::SchemaMigration Load (1.6ms) SELECT "schema_migrations".* FROM "schema_migrations"
Weiß jemand was ich falsch mache? Schätze die Hilfe!
AKTUALISIEREN:
Mein Server wird mit kubernetes bereitgestellt. Ich vermute, dass ich die Datenbank nicht zurücksetzen kann, da der Server läuft.
Versuchen Sie dies, es hat für mich funktioniert:
Rails_ENV=production rake db:drop DISABLE_DATABASE_ENVIRONMENT_CHECK=1
in einer einzigen Zeile.
Dies geschieht auch, wenn Sie die Produktionsdatenbank in die lokale Datenbank sichern. Wenn Sie es auf dem lokalen Computer löschen möchten, müssen Sie bin/Rails db:environment:set Rails_ENV=development
und nach rake db:drop
einstellen.
Aus Herokus Dokumentation zu Running Rake-Befehle :
Die Task db: reset wird nicht unterstützt. Heroku-Apps haben keine Berechtigung zum Löschen und Erstellen von Datenbanken. Verwenden Sie stattdessen den Befehl heroku pg: reset.
Anstatt also Rails
oder rake db:reset
zu verwenden, versuchen Sie Folgendes:
heroku pg:reset
ich weiß, es könnte ein bisschen spät sein, aber wenn es nicht mit der Standardmethode Rails funktioniert, können Sie immer psql wie psql --u your_user
verwenden.
geben Sie dann das Kennwort \l
ein, um alle DB aufzulisten. in meinem Fall lehne psql ab, eine einzelne Tabelle zu löschen, und ich erstelle eine zusätzliche Datenbank wie 'testdb', tippe \c testdb
, um eine Verbindung herzustellen, tippe dann drop database 'olddb_name';
und dann create database 'olddb_name';
und fertig!
Nun, obwohl dies ein alter Beitrag ist, aber für die zukünftige Bezugnahme können Sie tun
rake db:migrate VERSION=0
Und dann
rake db:migrate
Es funktioniert nicht, aber Sie sollten Befehle wie diesen ausführen
bundle exec rake Rails_ENV=production db:drop DISABLE_DATABASE_ENVIRONMENT_CHECK=1
und wenn Sie die Tabelle fallen lassen, müssen Sie sie zurück erstellen. So erhalten Sie eine Fehlermeldung, wenn Sie keine Rechte für createdb haben. Hier Ihr Asnwer Postgres-Berechtigung zum Erstellen einer Datenbank auf Rake verweigert db: create: all
wenn Sie psql
eingeben, verlassen Sie das Fenster, indem Sie \q
eingeben.
Wie ich schon sagte, das ist nicht die Antwort, aber ich hoffe, dass dies Ihre Zeit spart, während Sie suchen. Weil ich jetzt genau dort bin. VIEL GLÜCK UND VIEL SPASS
Kannst du unten einen Schuss geben?
Rails_ENV=production rake db:drop
Rails_ENV=production rake db:create
Dies ist eine alte Methode, aber so habe ich die Datenbank auf den ursprünglichen Zustand zurückgesetzt.