Wenn ich MySQL-Daten in die Entwicklungsumgebung in der Produktionsumgebung einfügte, konnte ich sie ohne besonderen Fehler eingeben, aber als ich sie löschte, trat ein Fehler auf und ich war süchtig danach. Es mag ein etwas ungewöhnlicher Fall sein, aber ich habe beschlossen, ihn als Referenz für andere Personen zusammenzufassen.
Im Folgenden finden Sie einen Artikel darüber, wie Sie MySQL-Daten in der Produktionsumgebung zunächst in die Entwicklungsumgebung einfügen.
Als ich den Befehl zum Löschen der Datenbank selbst in der Entwicklungsumgebung ausführte, ...
$ rails db:drop
Ich habe den Fehler `` `ActiveRecord :: ProtectedEnvironmentError``` erhalten. .. ..
Die Bedeutung dieses Fehlers ist
Ich versuche, eine Datenbank in einer Produktionsumgebung zu betreiben. Ist das in Ordnung?
Es ist wie eine Warnung, Sie können den Vorgang fortsetzen, indem Sie die Umgebungsvariable eingeben. Ich sage.
Es ist in erster Linie eine Entwicklungsumgebung, aber warum kommt es als Produktionsumgebung heraus? ??
rails 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
bin/rails:4:in `<main>'
Tasks: TOP => db:migrate:reset => db:drop => db:check_protected_environments
(See full trace by running task with --trace)
Ich werde aus der Schlussfolgerung zuerst schreiben,
In Rails5 werden Umgebungsvariablen in MySQL gespeichert. Wenn Sie die Daten der Produktionsumgebung so wie sie sind in die Entwicklungsumgebung einfügen, werden die Variablen der Produktionsumgebung in den Umgebungsvariablen von MySQL gespeichert, sodass der obige Fehler aufgetreten ist. Es war.
Die Lösung besteht also darin, die MySQL-Umgebungsvariablen von denen in der Produktionsumgebung in diejenigen in der Entwicklungsumgebung umzuschreiben.
Stellen Sie eine Verbindung zu MySQL her.
$ mysql -h db -u root -p
Überprüfen Sie die vorhandene Datenbank.
$ show databases;
Geben Sie die Zieldatenbank an.
$ use *******;
Zeigt eine Liste der Tabellen in der Datenbank an.
$ show tables;
Ich denke, es gibt `` `ar_internal_metadata``` in der Tabellenliste. Hier werden Umgebungsvariablen gespeichert.
+---------------------------------------------------+
| Tables_in_scm_development |
+---------------------------------------------------+
| ar_internal_metadata |
| ... |
+---------------------------------------------------+
Betrachtet man den Inhalt von ar_internal_metadata,
$ select * from ar_internal_metadata;
Ich fand die Buchstaben "Produktion".
+-------------+-------------+---------------------+---------------------+
| key | value | created_at | updated_at |
+-------------+-------------+---------------------+---------------------+
| environment | production | 2020-01-10 09:37:29 | 2020-01-10 09:37:29 |
+-------------+-------------+---------------------+---------------------+
Ändern Sie diese `Produktion
in
`` Entwicklung```.
$ update ar_internal_metadata set value='development'
Wenn Sie sich den Inhalt von ar_internal_metadata noch einmal ansehen,
$ select * from ar_internal_metadata;
Die Umgebungsvariable könnte in "Entwicklung" geändert werden.
+-------------+-------------+---------------------+---------------------+
| key | value | created_at | updated_at |
+-------------+-------------+---------------------+---------------------+
| environment | development | 2020-01-10 09:37:29 | 2020-01-10 09:37:29 |
+-------------+-------------+---------------------+---------------------+
Raus aus MySQL
$ exit
Führen Sie den Befehl aus, um die Datenbank erneut zu löschen. Dann ist es mir gelungen!
$ rails db:drop
Es mag für manche Menschen schwierig sein zu verstehen, weil ich das Verfahren in Eile geschrieben habe, aber ich hoffe, es wird für jemanden in Not nützlich sein.