Lorsque j'ai mis des données MySQL dans l'environnement de développement de l'environnement de production, j'ai pu les saisir sans erreur particulière, mais lorsque je les ai effacées, une erreur s'est produite et j'en ai été accro. C'est peut-être un cas un peu inhabituel, mais j'ai décidé de le résumer comme une référence pour d'autres personnes.
Veuillez vous référer à ce qui suit pour un article sur la façon de placer les données MySQL dans l'environnement de production dans l'environnement de développement en premier lieu.
Lorsque j'ai exécuté la commande pour supprimer la base de données elle-même dans l'environnement de développement, ...
$ rails db:drop
J'ai eu l'erreur ActiveRecord :: ProtectedEnvironmentError
. .. ..
La signification de cette erreur est
J'essaie d'exploiter une base de données dans un environnement de production, est-ce que ça va?
C'est comme un avertissement, vous pouvez continuer l'opération en entrant la variable d'environnement. Je dis.
C'est un environnement de développement en premier lieu, mais pourquoi est-il un environnement de production? ??
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)
J'écrirai d'abord à partir de la conclusion,
Rails5 stocke les variables d'environnement dans MySQL, et en plaçant les données de l'environnement de production dans l'environnement de développement tel quel, les variables de l'environnement de production sont stockées dans les variables d'environnement de MySQL, de sorte que l'erreur ci-dessus s'est produite. C'était.
La solution est donc de réécrire les variables d'environnement MySQL de celles de l'environnement de production vers celles de l'environnement de développement.
Connectez-vous à MySQL.
$ mysql -h db -u root -p
Vérifiez la base de données existante.
$ show databases;
Spécifiez la base de données cible.
$ use *******;
Affiche une liste des tables de la base de données.
$ show tables;
Je pense qu'il y a «« ar_internal_metadata »dans la liste des tableaux. Les variables d'environnement y sont stockées.
+---------------------------------------------------+
| Tables_in_scm_development |
+---------------------------------------------------+
| ar_internal_metadata |
| ... |
+---------------------------------------------------+
En regardant le contenu de ar_internal_metadata,
$ select * from ar_internal_metadata;
J'ai trouvé les lettres `` production ''.
+-------------+-------------+---------------------+---------------------+
| key | value | created_at | updated_at |
+-------------+-------------+---------------------+---------------------+
| environment | production | 2020-01-10 09:37:29 | 2020-01-10 09:37:29 |
+-------------+-------------+---------------------+---------------------+
Modifiez cette `` production
'' en
développement ''.
$ update ar_internal_metadata set value='development'
En regardant à nouveau le contenu de ar_internal_metadata,
$ select * from ar_internal_metadata;
La variable d'environnement peut être changée en `` développement ''
+-------------+-------------+---------------------+---------------------+
| key | value | created_at | updated_at |
+-------------+-------------+---------------------+---------------------+
| environment | development | 2020-01-10 09:37:29 | 2020-01-10 09:37:29 |
+-------------+-------------+---------------------+---------------------+
Sortez de MySQL
$ exit
Exécutez à nouveau la commande pour supprimer le DB. Puis j'ai réussi!
$ rails db:drop
Cela peut être difficile pour certaines personnes à comprendre parce que j'ai rédigé la procédure à la hâte, mais j'espère qu'elle sera utile pour quelqu'un dans le besoin.
Recommended Posts