Квартира: TenantNotFound — одна из следующих схем недействительна

Я впервые использую Apartment Gem для мультитенантности в проекте Ruby on Rails. Я пытаюсь создать несколько арендаторов для пользователей в приложении Rails для цифровой библиотеки.

Я использую Devise Gem для аутентификации приложения, и я сгенерировал и сгенерировал конфигурацию файл, запустив приведенный ниже код в моем терминале

rails generate devise:install

Я также создал модель User для Devise, используя приведенный ниже код в своем терминале.

rails generate devise User

А для Apartment Gem я установил его и сгенерировал файл конфигурации, запустив приведенный ниже код в своем терминале.

bundle exec rails generate apartment:install

Я также настроил файл инициализатора config/initializers/apartment.rb по мере необходимости, используя предоставленную документацию, и я создал нового арендатора через мою страницу регистрации по адресу

localhost:3000/users/sign_up

Но когда я пытаюсь просмотреть только что созданный клиент в

http://newtenant.lvh.me:3000/

Я получаю ошибку ниже

Apartment::TenantNotFound(Одна из следующих схем недействительна: "" "public")

Я пытался выяснить причину проблемы, но мне до сих пор не повезло исправить ее. Мне нужна помощь. Заранее спасибо.


person Promise Preston    schedule 03.09.2019    source источник


Ответы (1)


Вот как я это исправил

Я просто добавил обратный вызов after_create с именем create_tenant в модель поддомена для моего мультитенанта, который user.rb в app/models/user.rb

class User < ApplicationRecord
  after_create :create_tenant

  private

  def create_tenant
    Apartment::Tenant.create(subdomain)
  end
end 

Используйте это, если вы использовали Devise для аутентификации.

class User < ApplicationRecord
  after_create :create_tenant

  # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable

  private

  def create_tenant
    Apartment::Tenant.create(subdomain)
  end
end

N/B: Мое имя модели для арендатора — Пользователь, ваше название модели может отличаться, поэтому проверьте в своем app/models/ название модели, которое вы использовали для < strong>мультитенант

Вы можете снова попробовать создать новых арендаторов, и все должно работать нормально.

Этот совет ниже может относиться только к тем, кто использовал Devise для аутентификации, или ко всем остальным лицам, использующим систему аутентификации.

Если вы столкнетесь с какой-либо проблемой, подобной этой

Цепочка фильтров остановлена, так как :require_no_authentication отображается или перенаправляется

при попытке исправить проблему Tenant Not Found просто перезапустите локальный сервер, используя приведенный ниже код.

rails server

а затем перейдите по ссылке ниже, чтобы изменить вновь созданных пользователей/клиентов.

localhost:3000/users/edit

N/B: users в localhost:3000/users/edit представляет имя (таблицу) во множественном числе модели, которую я использовал для своего мультитенанта.

Когда откроется страница, просто Удалить/отменить учетную запись, а затем уже созданную.

Теперь вы можете снова попробовать создать новых арендаторов, и все должно работать нормально.

Это все.

Надеюсь, это поможет

person Promise Preston    schedule 03.09.2019