2011-07-26 33 views
34

我已經安裝了Devise,現在想刪除它,包括它生成的所有文件。我怎麼做?Ruby:如何卸載Devise?

+1

我相信你需要運行一個發電機設計,以創建任何文件在您的目錄中開始。因此你應該可以運行例如'鐵軌銷燬設計:視圖'。你已經嘗試過了嗎? – polarblau

+0

我知道我應該在git中分支它 –

回答

89

我期待在今天解決同樣的問題,因爲這是不回答,給它一去=)

模式

如果默認安裝

設計生成User模型。 刪除devise下的行。這是我的樣子。

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

attr_accessible,你可能會刪除email:passwordpassword_confirmationremember_me如果你不再需要他們。

查看

默認安裝設計中不產生你的app文件夾視圖。如果您爲Devise生成覆蓋視圖,則可以通過運行rails destroy devise:views(Rails 3)來刪除它們。

通常,所有視圖都存儲在app/views/devise中。

控制器

默認情況下,設計出不會產生任何的控制器了。如果你做了任何覆蓋,他們很可能被稱爲registrations_controller。在您的項目中搜索繼承Devise::RegistrationsController類的控制器。另外,如果你遵循Devise的wiki和猴子周圍添加重定向方法等,請注意諸如after_sign_in_path_forstore_location等方法用於重定向用戶。

遷移

如果你通過它的發電機安裝設計,尋找出一個遷移create_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

上面的指南列出使用由助手設計產生的場。您應該能夠查看列表和您的模型(例如,在控制檯中調用User),生成一個刪除這些列的遷移。

但是...

爲了保持一致性,我們必須將遷移轉換爲不使用助手使用上面的指南,然後生成一個遷移來刪除它們。這是爲了遷移歷史一致性,否則運行遷移的任何人都可能嘗試調用不存在的幫助器。此外,您遷移到刪除字段也將期望字段出現。

或者,它可能是擠出遷移並依賴模式的最新狀態的schema.rb/structure.sql的好時機。即使在刪除遷移後,您也可以隨時使用rake db:schema:load隨時重新創建您的開發 DB。

初始化器和Locale

刪除在config/initializersdevise.rbdevise.en.ymlconfig/locales

路線

刪除任何devise_for線。這些將在刪除寶石後引發錯誤。

寶石文件

Yaay。所有圓頂,從您的gemfile中刪除行gem 'devise'

+0

清晰,寫得很好,謝謝! – lambinator

+0

感謝致謝=) –

+1

我唯一不同意的是從原始遷移中刪除字段。遷移作爲數據庫的一種版本控制存在,您可以運行或回滾。因此,我認爲最好創建另一個從模型中刪除這些字段的遷移。 – nunopolonia

2

在我的情況下,我有兩個模型用戶和管理員,我堅持Devise,但我有ActiveAdmin名稱衝突問題,需要我刪除管理模型。但是因爲在設計中有很多關於Admin的引用,我不得不採取下面的步驟。不過,我認爲它也回答了上面的原始問題。我相信這樣做的正確方法是:

1.找到用戶模型的設計遷移並將其回滾[重要提示:如果您不想刪除與Devise關聯的用戶表,則跳過此STEP]

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

例如: rake db:rollback VERSION:20110430031806

2.Run此命令刪除設計和相關聯的文件。 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.To徹底清除設計,你需要刪除所有引用它在你的模型,控制器和視圖。這是手動工作。上面的答案提供了找到這個垃圾的很好的細節,但是對於我的目的來說是不完整的。我希望這可以幫助別人。

1

我發現daemonsy的回覆是非常有用有幫助。當你這樣做時,還有其他一些事情需要考慮。

更換設計

  1. 如果你想用自己的身份驗證來取代制定,我建議這個Railscast:(需要訂閱,但它是最好的$ 9 /月,你可以花)Authentication from Scratch (revised)
  2. 這Railscast(無需預訂)可與忘記密碼鏈接幫助和「記住我」選項(東西設計提供開箱即用,但你幾乎可以建立容易自己):Remember Me & Reset Password

測試

  1. 你這樣做之前,我建議運行所有測試,以確保它們正在傳遞。
  2. 刪除Devise後,您的驗證相關測試可能會失敗,因此計劃花些時間修復失敗的測試。這是一件好事,因爲它可以幫助你看到當你移除Devise時什麼東西「爆發」了。
  3. 確保你也檢查你的測試助手。我的大部分助手都在/spec/spec_helper.rb中。事實上,我更新了spec_helper.rb中的方法(例如,「login_user」)後,大多數失敗的測試都開始傳遞。
8

使用發電機刪除的配置文件,以及(步驟2),因此整個過程會被(引用以前的答案):

  1. 刪除表:rake db:rollback VERSION=<insert the version number of the migration>
  2. 刪除配置: (以模型的名稱取代「用戶」)rails destroy devise User
  3. 刪除引用您的routes.rb,Gemfile中,控制設計:rails destroy devise:install
  4. 刪除您的用戶模型LER文件,像下面的視圖文件,如果你使用它們(再次更換 '用戶' 與型號名稱):
    • devise_for(routes.rb中)
    • 寶石 '設計'(的Gemfile )
    • before_action:authenticate_user!(控制器)
    • user_signed_in?(控制器,視圖)
    • CURRENT_USER(控制器,視圖)
    • USER_SESSION(控制器,視圖)