Ruby:如何卸载Devise?

我已经安装了Devise ,现在想删除它,包括它所产生的所有文件。 我怎么做?

我正在考虑今天解决同样的问题,因为这是没有答案,给它一个=)

楷模

如果您默认安装,则devise生成一个User模型。 删除devise下的线。 这是我的样子。

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

attr_accessible ,如果不再需要,可以删除email :passwordpassword_confirmationremember_me

查看

默认的Devise安装不会在您的app文件夹中生成视图。 如果你为Devise生成覆盖视图,你可以通过运行rails destroy devise:views (Rails 3)来删除它们。

一般来说,所有的视图都存储在app/views/devise

控制器

默认情况下,Devise也不会生成任何控制器。 如果你做了任何覆盖,他们很可能被称为registrations_controller 。 在您的项目中searchinheritanceDevise::RegistrationsController类的控制器。

另外,如果你按照Devise的wiki和猴子的方式来添加redirect方法等,可以看看用于redirect用户的诸如after_sign_in_path_forafter_sign_in_path_for等方法。

迁移

如果您通过其生成器安装Devise,请注意create_users的迁移。 如果您不再需要它,请使用drop_table :users迁移中的drop_table :users来摆脱它。

我会假设大多数人会想要保持他们的用户模型。 如果您使用Devise <2.0,则迁移由助手完成。 一旦从Gemfile删除Devise,Rails将不会理解下面的帮助者,并且抛出错误,例如,当您尝试在另一个框上重新运行这些迁移时。 这些帮手是:

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

对于确切的列,下面是对Devise生成的列的引用。

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

上面的指南列出了使用助手生成的Devise字段。 您应该能够查看列表和模型(例如,在控制台中调用User ),生成一个移除这些列的移植。

但…

有一点不幸的是,为了保持一致性,我们必须将迁移转换为不使用助手使用上面的指南,然后生成一个迁移来删除它们。 这是为了迁移历史一致性,否则运行迁移的任何人都可能尝试调用不存在的助手。 此外,您迁移到删除字段也将期望字段存在。

或者,它可能是schema.rb迁移的好时机,并依赖schema.rb / structure.sql作为模式的最新状态。 即使在删除迁移之后,您也可以随时使用rake db:schema:load随时重新创build开发数据库。

初始化程序和区域设置

config/locales删除config/initializers devise.en.ymldevise.en.yml

路线

删除任何devise_for行。 这些将在删除gem后引发错误。

gem文件

Yaay。 所有的圆顶,从您的gemfile中删除线gem 'devise'

使用生成器也可以删除configuration文件(第2步),因此整个过程将是(参考以前的答案):

  1. 删除表: rake db:rollback VERSION=<insert the version number of the migration>
  2. 删除configuration: rails destroy devise:install
  3. 删除你的用户模型: rails destroy devise User (用你的模型名称replace“User”)
  4. 如果您使用它们(再次用您的模型名称replace'user'),请移除您的routes.rb,gemfile,控制器文件和查看文件中对devise的引用,如下所示:
    • devise_for (routes.rb)
    • gem'devise' (gemfile)
    • before_action:authenticate_user! (控制器)
    • user_signed_in? (控制器,视图)
    • current_user (controllers,views)
    • user_session (控制器,视图)

在我的情况下,我有两个模型用户和pipe理员,我坚持与devise,但我有一个ActiveAdmin的名称冲突问题,需要我删除pipe理模型。 但是因为在devise中有很多Admin的引用,所以我不得不采取下面的步骤。 不过,我认为它也回答了上面的原始问题。 我相信正确的做法是:

1.find用户模型的devise迁移并回滚[重要:如果您不想删除与Devise关联的用户表,则跳过此步骤]

rake db:rollback VERSION=<insert the version number of the migration>

例如: rake db:rollback VERSION:20110430031806

2.运行此命令删除Devise和关联的文件。 rails destroy devise Admin (如果Admin是具有用户帐户的模型的名称)。

这产生这个输出:

 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.要完全删除devise,您需要删除您的模型,控制器和视图中的所有引用。 这是手动工作。 上面的答案提供了很好的细节来find这个cruft,但是对于我的目的是不完整的。 我希望这可以帮助别人。

我发现daemonsy的回复非常有帮助。 当你这样做的时候,还有其他一些事情需要考虑。

replacedevise

  1. 如果你打算用自己的authentication来replaceDevise,我推荐这个Railscast: 从头开始authentication(修改) (需要订阅,但是你可以花费最好的$ 9 /月)。
  2. 这个Railscast(无需订阅)可以帮助忘记密码链接和“记住我”选项(Devise提供的东西,但你可以很容易地自己构build): 记住我和重置密码

testing

  1. 在你做这个之前,我build议运行你所有的testing,以确保它们通过。
  2. 删除devise后,您的validation相关的testing可能会失败,所以打算花一些时间修复失败的testing。 这是一件好事,因为它会帮助你看到什么东西“打破”,当你删除devise。
  3. 确保你也检查你的testing助手。 我的大部分帮手都在/spec/spec_helper.rb中。 事实上,我更新了spec_helper.rb中的方法(例如“login_user”)后,大部分失败的testing都开始传递。