использовать некоторое Middleware только для конкретного сайта Rack - PullRequest
0 голосов
/ 04 января 2011

У меня есть сервер Rack, на котором я запускаю несколько веб-сайтов.

use Rack::Session::Cookie

app = lambda do |env|

  case

  # Kek Mobile
  when env['HTTP_HOST'] =~ /mobi.kek.com/ 
    require ::File.expand_path(::File.join(::File.dirname(__FILE__),'code','kek_mobile','main.rb'))
    selectedApp = KekMobile.new

  # Kek Facebook App
  when env['HTTP_HOST'] =~ /fb.kek.com/ 
    require ::File.expand_path(::File.join(::File.dirname(__FILE__),'code','facebook','main.rb'))
    selectedApp = Facebook.new

  else #we launch the corp website
    require ::File.expand_path(::File.join(::File.dirname(__FILE__),'code','corp','main.rb'))
    selectedApp = Corp.new

  end

  selectedApp.call env
end

run app

Я пытаюсь использовать промежуточное программное обеспечение для стойки, но я не хочу использовать их для всех веб-сайтов. Например, я хотел бы использовать OAuth Middleware только для веб-сайта приложения Facebook. Я пытался использовать Middleware в операторе when или в файле main.rb веб-сайта, но он не работает. Можно ли запустить сайт Middleware?

Заранее спасибо.

Thomy

1 Ответ

0 голосов
/ 01 февраля 2011

Я полагаю, что промежуточное ПО URLMap решит вашу проблему или, по крайней мере, поставит вас на правильный путь.

Как вы можете видеть, URLMap позволяет вам предоставлять различные промежуточные программы для каждого приложения:

use Rack::Lint

map "/" do
  use Rack::CommonLogger
  run our_test_app
end

map "/lobster" do
  use Rack::ShowExceptions
  run Rack::Lobster.new
end

Из вашего примера ясно, что это не будет работать напрямую, поскольку вы отображаете на основе хоста HTTP. Однако в официальных документах упоминается: « Поддержка имен хостов HTTP / 1.1 существует, если URL-адреса начинаются с http: // или https: //.». Так что, возможно, вы можете позвонить map "http://mobi.kek.com" и * 1017 . *

Удачи!

...