Подтвердить что ты не робот

Ruby: как удалить Devise?

Я установил Devise и теперь хочу удалить его, включая все файлы, которые он сгенерировал. Как это сделать?

4b9b3361

Ответ 1

Я смотрю на решение той же проблемы сегодня, и поскольку на это не отвечают, давая ей go =)

Модели

Devise генерирует модель User, если вы установили по умолчанию. Удалите строки под devise. Вот как выглядит мой.

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

В attr_accessible вы можете удалить email, :password, password_confirmation и remember_me, если они вам больше не нужны.

Просмотры

По умолчанию Devise install не генерирует представления в вашей папке app. Если вы создали переопределяющие представления для Devise, вы можете удалить их, запустив rails destroy devise:views (Rails 3).

Как правило, все представления сохраняются в app/views/devise.

Контроллеры

По умолчанию Devise также не создает никаких контроллеров. Если вы сделали какие-либо переопределения, они, скорее всего, известны как registrations_controller. Найдите свой проект для контроллеров, которые наследуют класс Devise::RegistrationsController.

Кроме того, если вы следовали за вики и обезьяной, чтобы добавить методы перенаправления и т.д., обратите внимание на методы, такие как after_sign_in_path_for, store_location и т.д., которые предназначены для перенаправления пользователей.

Миграция

Если вы установили Devise через свои генераторы, обратите внимание на миграцию create_users. Если вам это больше не нужно, используйте drop_table :users в процессе миграции, чтобы избавиться от него.

Я предполагаю, что большинство людей захотят сохранить свою модель User. Если вы используете Devise < 2.0, миграции выполняются помощниками. Как только вы удалите Devise из Gemfile, 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.

Инициализаторы и локали

Удалите devise.rb в config/initializers и devise.en.yml в config/locales.

Маршруты

Удалите все строки devise_for. Это вызовет ошибки после удаления драгоценного камня.

Файл Gem

Yaay. Весь купол, удалите строку gem 'devise' из вашего gemfile.

Ответ 2

Используйте генератор для удаления файлов конфигурации (шаг 2), поэтому весь процесс будет (ссылаясь на предыдущие ответы):

  • Удалить таблицу: rake db:rollback VERSION=<insert the version number of the migration>
  • Удалить конфигурацию: rails destroy devise:install
  • Удалите свою модель пользователя: rails destroy devise User (замените "Пользователь" на имя вашей модели)
  • Удалите ссылки на создание в ваших файлах маршрута. rb, gemfile, контроллеров и файлы вида, например, следующие, если вы их использовали (снова заменив "пользователь" на свое имя модели):
    • devise_for (routes.rb)
    • gem 'devise' (gemfile)
    • before_action: authenticate_user! (контроллеры)
    • user_signed_in? (контроллеры, представления)
    • current_user (контроллеры, представления)
    • user_session (контроллеры, представления)

Ответ 3

В моем случае у меня было две модели User и Admin, и я придерживаюсь Devise, но у меня была проблема с конфликтом имен с ActiveAdmin, которая требует от меня удалить модель администратора. Но поскольку в разработке было так много ссылок на 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, вам нужно удалить все ссылки на него в своих моделях, контроллерах и представлениях. Это ручная работа. Ответ, приведенный выше, дает хорошие детали для поиска этого рывка, но был неполным для моих целей. Надеюсь, это поможет кому-то другому.

Ответ 4

Я нашел ответ демона, чтобы быть очень полезным. Вот несколько других вещей, которые следует учитывать, когда вы это делаете.

Замена программы

  • Если вы собираетесь заменить Devise своей собственной аутентификацией, я рекомендую этот Railscast: Аутентификация с нуля (пересмотренная) (требуется подписка, но это лучшие $9/mo, которые вы можете потратить).
  • И этот Railscast (без необходимости подписки) может помочь с ссылкой на забытый пароль и "помнить меня" (вещи, которые Devise предлагает из коробки, но что вы можете легко создать сами): Запомнить меня и Reset Пароль

Испытания

  • Прежде чем вы это сделаете, я рекомендую запустить все ваши тесты, чтобы убедиться, что они проходят.
  • После удаления Devise ваши тесты, зависящие от проверки подлинности, скорее всего, потерпят неудачу, поэтому планируйте потратить некоторое время на проверку неудачных тестов. Это хорошо, потому что это поможет вам понять, что "сломало", когда вы удалили Devise.
  • Обязательно проверьте свои тестовые помощники. Большинство моих помощников были в /spec/spec _helper.rb. Фактически, большинство моих неудачных тестов начали проходить, как только я обновил методы в spec_helper.rb(например, "login_user" ).