仅为特定的Rack网站使用一些中间件

时间:2011-01-04 20:49:47

标签: ruby facebook web rack middleware

我有一个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

我正在尝试使用一些Rack Middleware,但我不想在所有网站上使用它们。例如,我想仅在Facebook应用程序网站上使用OAuth中间件。 我试图在when语句或网站main.rb文件中使用中间件,但它不起作用。 是否可以推出特定于网站的中间件?

提前谢谢。

Thomy

1 个答案:

答案 0 :(得分: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"map "http://fb.kek.com"

祝你好运!