Ruby:如何卸载Devise?
我已经安装了Devise ,现在想删除它,包括它所产生的所有文件。 我怎么做?
我正在考虑今天解决同样的问题,因为这是没有答案,给它一个=)
楷模
如果您默认安装,则devise生成一个User
模型。 删除devise
下的线。 这是我的样子。
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable
在attr_accessible
,如果不再需要,可以删除email
:password
, password_confirmation
和remember_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_for
, after_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.yml
和devise.en.yml
。
路线
删除任何devise_for
行。 这些将在删除gem后引发错误。
gem文件
Yaay。 所有的圆顶,从您的gemfile中删除线gem 'devise'
。
使用生成器也可以删除configuration文件(第2步),因此整个过程将是(参考以前的答案):
- 删除表:
rake db:rollback VERSION=<insert the version number of the migration>
- 删除configuration:
rails destroy devise:install
- 删除你的用户模型:
rails destroy devise User
(用你的模型名称replace“User”) - 如果您使用它们(再次用您的模型名称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
- 如果你打算用自己的authentication来replaceDevise,我推荐这个Railscast: 从头开始authentication(修改) (需要订阅,但是你可以花费最好的$ 9 /月)。
- 这个Railscast(无需订阅)可以帮助忘记密码链接和“记住我”选项(Devise提供的东西,但你可以很容易地自己构build): 记住我和重置密码
testing
- 在你做这个之前,我build议运行你所有的testing,以确保它们通过。
- 删除devise后,您的validation相关的testing可能会失败,所以打算花一些时间修复失败的testing。 这是一件好事,因为它会帮助你看到什么东西“打破”,当你删除devise。
- 确保你也检查你的testing助手。 我的大部分帮手都在/spec/spec_helper.rb中。 事实上,我更新了spec_helper.rb中的方法(例如“login_user”)后,大部分失败的testing都开始传递。