Задать вопрос

Как сделать исключение в роутинге в rails 3

Имеется роутинг, прописанный в самом конце
match "/:url" => "main#article", as: :article


У меня есть статический файл favicon.ico.
Запускаю проект локально без nginx(с ним это всё реализуется через location = /favicon.ico).
Браузер запрашивает иконку и запрос роутится на main#article.
Как создать исключение в роутинге, чтобы набор запросов шёл на статику?
  • Вопрос задан
  • 2830 просмотров
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 4
Ilya_Drey
@Ilya_Drey
Все довольно просто, routes.rb:
match "/favicon.ico" => "tools#favicon"
match "/:url" => "main#article", as: :article, constraints: DoesntMatch.new(path:


tools_controller.rb
class ToolsController < ApplicationController
  def favicon
    data = File.open("public/favicon_test.ico", "rb").read
    send_data(data, :filename => "favicon.ico", :type => "image/png")
  end
end
Ответ написан
@dizer
не доводить такие запросы до апп-сервера и отдавать их прокси-сервером?
Ответ написан
sl_bug
@sl_bug
   class DoesntMatch                                                                                 
     def initialize(options)                                                                         
       @options = options                                                                            
     end                                                                                             
                                                                                                     
     def matches?(request)                                                                           
       @options.inject(true) { |m, (k,v)|                                                            
         m && (request.send(k) !~ v)                                                                 
       }                                                                                             
     end                                                                                             
   end 

  match "/:url" => "main#article", as: :article, constraints: DoesntMatch.new(path: /^\/favicon\.ico/)


например так
Ответ написан
Stamm
@Stamm Автор вопроса
Проще наверное будет поднять nginx+unicorn, чем городить такие велосипеды, а жаль =)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы