我有一个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
答案 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"
。