J'ai installé Devise et je veux maintenant le supprimer, y compris tous les fichiers qu'il a générés. Comment je fais ça?
Je cherche à résoudre le même problème aujourd'hui et comme cela n'est pas répondu, essayez-le =)
Modèles
Devise génère un modèle User
si vous l'avez installé par défaut. Supprimez les lignes sous devise
. Voici à quoi ressemble la mienne.
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
Dans attr_accessible
, vous pouvez supprimer email
, :password
, password_confirmation
et remember_me
si vous n'en avez plus besoin.
Vues
Une installation par défaut de Devise ne génère pas de vues dans votre dossier app
. Si vous avez généré des vues prioritaires pour Devise, vous pouvez les supprimer en exécutant Rails destroy devise:views
(Rails 3).
Généralement, toutes les vues sont stockées dans app/views/devise
.
Contrôleurs
Par défaut, Devise ne génère pas non plus de contrôleurs. Si vous avez effectué des remplacements, ils sont probablement appelés registrations_controller
. Recherchez dans votre projet des contrôleurs qui héritent Devise::RegistrationsController
classe.
De plus, si vous avez suivi le wiki de Devise et que vous avez utilisé des singes pour ajouter des méthodes de redirection, etc., recherchez des méthodes telles que after_sign_in_path_for
, store_location
etc qui sont destinés à rediriger les utilisateurs.
Migrations
Si vous avez installé Devise via ses générateurs, recherchez une migration create_users
. Si vous n'en avez plus besoin, utilisez drop_table :users
dans une migration pour s'en débarrasser.
Je suppose que la plupart des gens voudraient conserver leur modèle d'utilisateur. Si vous utilisez Devise <2.0, les migrations sont effectuées par des assistants. Une fois que vous supprimez Devise du Gemfile
, Rails ne comprendra pas les assistants ci-dessous et ne générera pas d'erreurs, par exemple, lorsque vous essayez de relancer ces migrations sur une autre boîte. Ces les aides sont:
t.database_authenticatable
t.recoverable
t.rememberable
t.trackable
t.encryptable
t.confirmable
t.lockable
t.token_authenticatable # => becomes t.string :authentication_token
Pour les colonnes exactes, ce qui suit fait référence aux colonnes générées par Devise.
https://github.com/plataformatec/devise/wiki/How-To:-Upgrade-to-Devise-2.0-migration-schema-style
Le guide ci-dessus répertorie les champs générés par Devise à l'aide des assistants. Vous devriez pouvoir parcourir la liste et votre modèle (par exemple en appelant User
dans la console), générer une migration qui supprime ces colonnes.
MAIS ...
Il est un peu regrettable que, pour des raisons de cohérence, nous devions convertir la migration pour ne pas utiliser les assistants à l'aide du guide ci-dessus, puis générer une migration pour les supprimer. C'est pour la cohérence de l'historique de migration, sinon toute personne exécutant les migrations pourrait essayer d'appeler les assistants inexistants. De plus, votre migration pour supprimer les champs s'attendra également à ce que les champs soient présents.
Alternativement, cela pourrait être un bon moment pour écraser les migrations et compter sur schema.rb
/structure.sql
pour l'état actuel du schéma. Même après avoir supprimé les migrations, vous pouvez toujours recréer votre développement DB à tout moment en utilisant rake db:schema:load
.
Initialiseurs et paramètres régionaux
Retirer devise.rb
dans config/initializers
et devise.en.yml
dans config/locales
.
Itinéraires
Supprimer tout devise_for
lignes. Ceux-ci entraîneront des erreurs après la suppression de la gemme.
Fichier Gem
Yaay. Tous les dômes, supprimez la ligne gem 'devise'
de votre gemfile.
Utilisez également le générateur pour supprimer les fichiers de configuration (étape 2), pour que l'ensemble du processus soit (en se référant aux réponses précédentes):
rake db:rollback VERSION=<insert the version number of the migration>
Rails destroy devise:install
Rails destroy devise User
(remplacez 'Utilisateur' par le nom de votre modèle)Dans mon cas, j'avais deux modèles User et Admin et je m'en tiens à Devise, mais j'ai eu un problème de collision de noms avec ActiveAdmin qui me demande de supprimer le modèle Admin. Mais comme il y avait tellement de références à Admin dans le plan, j'ai dû suivre les étapes ci-dessous. Je pense que cela répond également à la question initiale ci-dessus. Je pense que la bonne façon de procéder est:
1.Trouvez la migration de devise pour le modèle utilisateur et annulez-la [IMPORTANT: SI vous ne voulez PAS supprimer la table utilisateur associée à Devise, SAUTEZ CETTE ÉTAPE]:
rake db:rollback VERSION=<insert the version number of the migration>
exemple: rake db:rollback VERSION:20110430031806
Exécutez cette commande pour supprimer Devise et les fichiers associés. Rails destroy devise Admin
(si Admin est le nom du modèle avec des comptes d'utilisateurs).
Cela produit cette sortie:
invoke active_record
remove db/migrate/20110430031806_devise_create_admins.rb
remove app/models/admin.rb
invoke test_unit
remove test/unit/admin_test.rb
remove test/fixtures/admins.yml
route devise_for :admins
3.Pour supprimer complètement Devise, vous devez supprimer toutes les références à celui-ci dans vos modèles, contrôleurs et vues. Il s'agit d'un travail manuel. La réponse ci-dessus fournit de bons détails pour trouver cette cruauté, mais était incomplète à mes fins. J'espère que ça aidera quelqu'un d'autre.
J'ai trouvé la réponse de daemonsy très utile. Voici quelques autres éléments à considérer lors de cette opération.
Remplacement de Devise
Tests
Cela a fonctionné pour moi!
1:
Rails d devise User
Ceci supprime le modèle et les itinéraires.2:
Rails d devise:install
, Cela détruitdevise.rb
etdevise.en.yml
des dossiers.3: créez une migration par exemple:
Rails g migration drop_user_table
. J'ai utilisédrop_table :users , force: :cascade
,force: :cascade
; prend soin dePG :: DependentObjectsStillExist: ERREUR:
cela se produit si d'autres tables dépendent de la table utilisateur.