に基づいてRackアプリケーションを開発しましたSinatra::Base
。ここで、1つのRackアプリケーションで、それぞれがわずかに異なる構成を持つ多くのインスタンスを使用したいと思います。
私rackup
は次のようになります
use Rack::Lint
map '/mel' do
run Site.new('/home/mel/site').app
end
map '/pub' do
run Site.new('/pub').app
end
このSite
クラスはさまざまなパラメーター(この例ではルートディレクトリのみ)を収集し、いくつかの準備作業を行います。このメソッドは、提供されたインスタンスへの参照を保持するオブジェクトを#app
返す必要があります。Server
Site
これは、Site
andServer
コードの例です。
class Site
def initialize(root_dir)
@root_dir = root_dir
# ... set up things ...
end
def app
# This is where a new Server Rack application should be created
return Server.new { |server| server.set :site, self }
end
end
class Server < Sinatra::Base
before do
@content = settings.site.all_files
end
get /(.*)/ do |url_path|
# do things...
end
end
このコードの問題は、#app
メソッドが有効なRackアプリケーションを返さないことです。
構成済みの新しいRackアプリケーション#app
を返却するにはどうすればよいですか?Server