0

複数の Web サイトを実行するラック サーバーがあります。

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

いくつかのラック ミドルウェアを使用しようとしていますが、すべての Web サイトで使用したくありません。たとえば、Facebook アプリの Web サイトのみに OAuth ミドルウェアを使用したいと考えています。when ステートメントまたは Web サイトの main.rb ファイルでミドルウェアを使用しようとしましたが、機能しません。Web サイト固有のミドルウェアを起動することはできますか?

前もって感謝します。

トミー

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"ますmap "http://fb.kek.com"

幸運を!

于 2011-02-01T18:37:57.020 に答える