0

我有一个运行多个网站的机架服务器。

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

我正在尝试使用一些机架中间件,但我不想将它们用于所有网站。例如,我想仅对 facebook 应用程序网站使用 OAuth 中间件。我尝试在 when 语句或网站 main.rb 文件中使用中间件,但它不起作用。是否可以启动网站特定的中间件?

先感谢您。

汤米

4

1 回答 1

0

我相信 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 主机进行映射的。但是,官方文档提到,“如果 URL 以 http:// 或 https:// 开头,则支持 HTTP/1.1 主机名。 ”因此,也许您可​​以调用map "http://mobi.kek.com"and map "http://fb.kek.com"

祝你好运!

于 2011-02-01T18:37:57.020 回答