Ruby:如何卸载Devise?

时间:2011-07-26 16:11:42

标签: ruby devise

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

5 个答案:

答案 0 :(得分:95)

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

模型

如果默认安装,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。在项目中搜索继承Devise::RegistrationsController类的控制器。

此外,如果您按照Devise的wiki和Monkey-ed来添加重定向方法等,请注意用于重定向用户的after_sign_in_path_forstore_location等方法。

<强>迁移

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

我假设大多数人都希望保留他们的用户模型。如果您正在使用Devise&lt; 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),生成删除这些列的迁移。

<强> BUT ...

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

或者,可能是压缩迁移并依赖schema.rb / structure.sql进行架构的最新状态的好时机。即使在删除迁移后,您也可以随时使用rake db:schema:load重新创建开发数据库。

初始值设定项和区域设置

删除devise.rb中的config/initializersdevise.en.yml中的config/locales

<强>路线

删除所有devise_for行。这些将在删除gem后引发错误。

宝石文件

Yaay。全部圆顶,从您的gemfile中删除行gem 'devise'

答案 1 :(得分:8)

使用生成器也可以删除配置文件(步骤2),因此整个过程将是(引用以前的答案):

  1. 删除表:rake db:rollback VERSION=<insert the version number of the migration>
  2. 删除配置:rails destroy devise:install
  3. 删除您的用户模型:rails destroy devise User(将“用户”替换为您的模型名称)
  4. 删除routes.rb,gemfile,controller文件以及如下所示的视图文件中的devise引用(如果您使用它们)(再次将'user'替换为您的模型名称):
    • devise_for (routes.rb)
    • 宝石'设计'(宝石文件)
    • before_action:authenticate_user!(控制器)
    • user_signed_in?(控制器,视图)
    • current_user (控制器,视图)
    • user_session (控制器,视图)

答案 2 :(得分:2)

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

1.找到用户模型的设计迁移并将其回滚 [重要提示:如果您不想删除与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,您需要删除模型,控制器和视图中对它的所有引用。这是手工工作。上面的答案为找到这个残余提供了很好的细节,但对于我的目的来说是不完整的。我希望这有助于其他人。

答案 3 :(得分:1)

我发现daemonsy的回复是非常有帮助。以下是您要做的其他一些事情。

更换设计

  1. 如果您要使用自己的身份验证替换Devise,我建议使用此Railscast:Authentication from Scratch (revised)(需要订阅,但这是您可以花费的最佳$ 9 /月)。
  2. 此Railscast(无需订阅)可以帮助忘记密码链接和“记住我”选项(Devise提供开箱即用的东西,但您可以自己轻松构建):Remember Me & Reset Password
  3. <强>测试

    1. 在此之前,我建议您运行所有测试以确保它们正在通过。
    2. 删除Devise后,您的身份验证相关测试可能会失败,因此计划花一些时间来修复失败的测试。这是一件好事,因为它可以帮助您在删除Devise时看到“破坏”的内容。
    3. 确保您也检查您的测试助手。我的大多数助手都在/spec/spec_helper.rb中。事实上,一旦我更新了spec_helper.rb中的方法(例如,“login_user”),我的大部分失败测试都开始传递。

答案 4 :(得分:0)

这对我有用!

1:rails d devise User这将删除模型和路线。

2:rails d devise:install,这会破坏devise.rbdevise.en.yml个文件。

3:创建迁移,例如:rails g migration drop_user_table。一世 已使用drop_table :users , force: :cascadeforce: :cascade;需要 照顾

PG :: DependentObjectsStillExist:错误:

如果其他表依赖于用户表,则会发生这种情况。