web-dev-qa-db-fra.com

Ruby: comment désinstaller Devise?

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?

39
krn

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.

99
Damon Aw

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):

  1. Retirez le tableau: rake db:rollback VERSION=<insert the version number of the migration>
  2. Supprimez la configuration: Rails destroy devise:install
  3. Supprimez votre modèle utilisateur: Rails destroy devise User (remplacez 'Utilisateur' par le nom de votre modèle)
  4. Supprimez les références à créer dans vos routes.rb, gemfile, fichiers de contrôleur et affichez les fichiers comme suit, si vous les avez utilisés (en remplaçant à nouveau 'user' par le nom de votre modèle):
    • devise_for (routes.rb)
    • gem 'devise' (gemfile)
    • before_action: authenticate_user! (contrôleurs)
    • ser_signed_in? (contrôleurs, vues)
    • current_user (contrôleurs, vues)
    • ser_session (contrôleurs, vues)
10
Nathan Hanna

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.

2
acoustic_north

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

  1. Si vous allez remplacer Devise par votre propre authentification, je recommande ce Railscast: Authentification à partir de zéro (révisé) (abonnement requis, mais c'est le meilleur 9 $/mois que vous pouvez dépenser).
  2. Et ce Railscast (aucun abonnement requis) peut vous aider avec un lien de mot de passe oublié et une option "se souvenir de moi" (choses que Devise propose hors de la boîte, mais que vous pouvez construire assez facilement vous-même): Se souvenir de moi et réinitialiser le mot de passe

Tests

  1. Avant de faire cela, je vous recommande d'exécuter tous vos tests pour vous assurer qu'ils réussissent.
  2. Après avoir supprimé Devise, vos tests dépendant de l'authentification échoueront probablement, alors prévoyez de passer du temps à corriger les tests qui échouent. C'est une bonne chose car cela vous aidera à voir ce qui s'est "cassé" lorsque vous avez supprimé Devise.
  3. Assurez-vous de vérifier également vos assistants de test. La plupart de mes assistants se trouvaient dans /spec/spec_helper.rb. En fait, la plupart de mes tests ayant échoué ont commencé à passer une fois que j'ai mis à jour les méthodes dans spec_helper.rb (par exemple, "login_user").
1
JoshDoody

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étruit devise.rb et devise.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 de

PG :: DependentObjectsStillExist: ERREUR:

cela se produit si d'autres tables dépendent de la table utilisateur.

0
ispirett