2014-11-28 1 views
10

Я использую этот рубиновый камень.Квартира ruby ​​gem: Хотите получить исключение

У меня есть добавить это в application.rb файле:

config.middleware.use 'Apartment::Elevators::Subdomain' 

Когда я пытаюсь ударить этого в браузере URL «test.domain.local: 3000», где поддомен «тест» схемы не существует в PostgreSQL , я вижу эту ошибку

Apartment::SchemaNotFound (One of the following schema(s) is invalid: test, "public") 

Я знаю, что это нормальное поведение драгоценного камня, но хотят, чтобы поймать это исключение и перенаправить пользователя на другую страницу, как я могу это сделать?

ответ

12

Это то, что я сделал:

Создать файл в LIB/rescued_apartment_middleware.rb

module RescuedApartmentMiddleware 
    def call(*args) 
    begin 
     super 
    rescue Apartment::TenantNotFound 
     Rails.logger.error "ERROR: Apartment Tenant not found: #{Apartment::Tenant.current.inspect}" 
     return [404, {"Content-Type" => "text/html"}, ["#{File.read(Rails.root.to_s + '/public/404.html')}"] ] 
    end 
    end 
end 

и добавить в вашу квартиру инициализатор файл следующие строки:

require 'rescued_apartment_middleware' 

Rails.application.config.middleware.use 'Apartment::Elevators::Subdomain' 
Apartment::Elevators::Subdomain.prepend RescuedApartmentMiddleware 

Это работает как прелесть! (Протестировано с рубином 2.1 и Rails 4.1)

+4

FYI 'Apartment :: DatabaseNotFound, Apartment :: SchemaNotFound' можно заменить' Apartment :: TenantNotFound'. Эти другие исключения устарели. – brad