我开发了一个基于Sinatra::Base
. 现在我想在单个 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
和Server
代码的示例:
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 应用程序。
我应该怎么做#app
才能返回一个新的、已配置的Server
Rack 应用程序?