Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Ruby: how to uninstall Devise?

Tags:

ruby

devise

I have installed Devise and now want to remove it, including all the files it has generated. How do I do that?

like image 407
krn Avatar asked Jul 26 '11 16:07

krn


2 Answers

I'm looking at solving the same problem today and since this is not answered, giving it a go =)

Models

Devise generates a User model if you installed by default. Remove the lines under devise. This is how mine looks like.

devise :database_authenticatable, :registerable,          :recoverable, :rememberable, :trackable, :validatable 

In attr_accessible, you may remove email, :password, password_confirmation and remember_me if you no longer need them.

Views

A default Devise install doesn't generate views in your app folder. If you generated overriding views for Devise, you may remove them by running rails destroy devise:views (Rails 3).

Generally, all the views are stored in app/views/devise.

Controllers

By default, Devise doesn't generate any controllers too. If you did any overrides, they are most likely known as registrations_controller. Search your project for controllers that inherit Devise::RegistrationsController class.

Also, if you followed Devise's wiki and monkey-ed around to add redirect methods etc, look out for methods such as after_sign_in_path_for, store_location etc that are for redirecting users.

Migrations

If you installed Devise via its generators, look out for a migration create_users. If you don't need it anymore, use drop_table :users in a migration to get rid of it.

I'll assume most people would want to keep their User model. If you're using Devise < 2.0, the migrations are done by helpers. Once you remove Devise from the Gemfile, Rails will not understand the helpers below and throw errors, for instance, when you're trying to rerun these migrations on another box. These helpers are:

t.database_authenticatable t.recoverable   t.rememberable t.trackable  t.encryptable t.confirmable t.lockable t.token_authenticatable # => becomes t.string :authentication_token 

For the exact columns, the below is reference to the columns generated by Devise.

https://github.com/plataformatec/devise/wiki/How-To:-Upgrade-to-Devise-2.0-migration-schema-style

The guide above lists the fields generated by Devise using the helpers. You should be able to look through the list and your model (e.g. calling User in console), generate a migration that removes those columns.

BUT...

It's a little unfortunate that for consistency, we have to convert the migration to not use helpers using the guide above then generate a migration to remove them. This is for migration history consistency, otherwise anyone running the migrations might try to call the non-existent helpers. Also, your migration to remove the fields will also expect the fields to be present.

Alternatively, it might be a good time to squash the migrations and rely on schema.rb / structure.sql for the schema's to-date state. Even after deleting migrations, you can always recreate your development DB anytime using rake db:schema:load.

Initializers and Locale

Remove devise.rb in config/initializers and devise.en.yml in config/locales.

Routes

Remove any devise_for lines. These will raise errors after the removal of the gem.

Gem File

Yaay. All dome, remove the line gem 'devise' from your gemfile.

like image 128
Damon Aw Avatar answered Sep 20 '22 00:09

Damon Aw


Use the generator to remove configuration files as well (step 2), so the whole process would be (referencing previous answers):

  1. Remove the table: rake db:rollback VERSION=<insert the version number of the migration>
  2. Remove the configuration: rails destroy devise:install
  3. Remove your User model: rails destroy devise User (replace 'User' with the name of your model)
  4. Remove references to devise in your routes.rb, gemfile, controller files, and view files like the following, if you used them (once again replacing 'user' with your model name):
    • devise_for (routes.rb)
    • gem 'devise' (gemfile)
    • before_action :authenticate_user! (controllers)
    • user_signed_in? (controllers, views)
    • current_user (controllers, views)
    • user_session (controllers, views)
like image 30
Nathan Hanna Avatar answered Sep 23 '22 00:09

Nathan Hanna