web-dev-qa-db-ja.com

Ruby:Deviseをアンインストールする方法?

Devise をインストールしましたが、生成したすべてのファイルを含めて削除します。それ、どうやったら出来るの?

39
krn

私は今日同じ問題を解決することを考えていますが、これは答えられていないので、それに行く=)

モデル

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をたどって、リダイレクトメソッドなどを追加した場合は、after_sign_in_path_forstore_locationなど、ユーザーをリダイレクトするためのメソッドを探してください。

マイグレーション

ジェネレータを介してDeviseをインストールした場合は、マイグレーション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

上記のガイドは、ヘルパーを使用してDeviseによって生成されたフィールドの一覧です。リストとモデルを確認して(コンソールでUserを呼び出すなど)、これらの列を削除する移行を生成できるはずです。

しかし...

一貫性を保つために、上記のガイドを使用して移行をヘルパーを使用しないように変換し、移行を生成してそれらを削除する必要があるのは少し残念です。これは、移行履歴の一貫性を保つためです。それ以外の場合は、移行を実行している誰もが存在しないヘルパーを呼び出そうとする可能性があります。また、フィールドを削除する移行では、フィールドが存在することも期待されます。

または、移行を抑制して、スキーマの最新状態をschema.rb/structure.sqlに依存させるのもよいタイミングかもしれません。マイグレーションを削除した後でも、rake db:schema:loadを使用すると、いつでも開発DBをいつでも再作成できます。

初期化子とロケール

devise.rbconfig/initializersdevise.en.ymlconfig/localesを削除します。

ルート

devise_for行をすべて削除します。これらは、gemの削除後にエラーを発生させます。

宝石ファイル

ヤイ。すべてのドーム、gemfileから行gem 'devise'を削除します。

99
Damon Aw

ジェネレーターを使用して構成ファイルも削除し(ステップ2)、プロセス全体は次のようになります(以前の回答を参照)。

  1. テーブルを削除します:rake db:rollback VERSION=<insert the version number of the migration>
  2. 構成を削除します:Rails destroy devise:install
  3. ユーザーモデルを削除します:Rails destroy devise User( 'User'をモデルの名前に置き換えます)
  4. Route.rb、gemfile、controllerファイル、viewファイルでdeviseへの参照を削除します(使用している場合は、「user」をモデル名に置き換えてください)。
    • devise_for(routes.rb)
    • gem 'devise'(gemfile)
    • before_action:authenticate_user!(コントローラー)
    • ser_signed_in?(コントローラー、ビュー)
    • current_user(コントローラー、ビュー)
    • ser_session(コントローラー、ビュー)
10
Nathan Hanna

私の場合、ユーザーと管理者という2つのモデルがあり、Deviseを使い続けていますが、ActiveAdminで名前の衝突の問題があり、管理者モデルを削除する必要があります。しかし、考案中のAdminへの参照が非常に多かったため、以下の手順を実行する必要がありました。しかし、それは上記の元の質問にも答えると思います。これを行う正しい方法は次のとおりです。

1.ユーザーモデルの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を完全に削除するには、モデル、コントローラー、およびビューでDeviseへのすべての参照を削除する必要があります。これは手作業です。上記の答えはこの残骸を見つけるための良い詳細を提供しますが、私の目的には不完全でした。これが他の誰かの役に立つことを願っています。

2
acoustic_north

デーモンシーの返事はとても役立つとわかりました。これを行う際に考慮すべき他のいくつかの事項を次に示します。

デバイスの置き換え

  1. Deviseを独自の認証に置き換える場合は、このRailscastをお勧めします: Scratchからの認証(改訂) (サブスクリプションが必要ですが、1か月あたり9ドルで最高です)。
  2. そして、このRailscast(サブスクリプションは必要ありません)は、パスワードを忘れた場合のリンクと「remember me」オプションをサポートします(Deviseはそのまま使用できますが、自分で簡単に構築できます): Remember Me&Reset Password

テスト

  1. これを行う前に、すべてのテストを実行して、テストが合格することを確認することをお勧めします。
  2. Deviseを削除すると、認証に依存するテストはおそらく失敗するので、失敗したテストの修正に時間をかけることを計画してください。これは、Deviseを削除したときに「壊れた」ものを確認するのに役立つので、良いことです。
  3. テストヘルパーも確認してください。私のヘルパーのほとんどは/spec/spec_helper.rbにありました。実際、spec_helper.rbのメソッド(「login_user」など)を更新すると、失敗したテストのほとんどが合格し始めました。
1
JoshDoody

これは私のために働いた!

1:Rails d devise Userこれにより、モデルとルートが削除されます。

2:Rails d devise:install、これによりdevise.rbおよびdevise.en.ymlファイル。

3:マイグレーションを作成します。例:Rails g migration drop_user_tabledrop_table :users , force: :cascadeforce: :cascade;の世話をします

PG :: DependentObjectsStillExist:エラー:

他のテーブルがユーザーテーブルに依存している場合に発生します。

0
ispirett