我希望能够从我的机器人初始化代码中检索我的Web应用程序的基本URL config.ru
.有点像:
puts "Starting up on http://#{ENV['SERVER_NAME']}:#{ENV['SERVER_PORT']}/#{ENV['MOUNT_POINT']}..."
Run Code Online (Sandbox Code Playgroud)
但是我没有找到任何可以从请求处理程序外部获得的内容.显然,我可以这样做:
...
def get
puts "Got a request for #{ENV['rack.url_scheme']}://#{ENV['HTTP_HOST']}#{ENV['REQUEST_PATH']}"
...
Run Code Online (Sandbox Code Playgroud)
因为请求是在那时定义的.但是在我的配置文件的开头,似乎没有定义这些变量.
我可以使用Rack方法来访问这些信息吗?这是在Rack启动完成之前还没有最终确定的情况之一吗?我似乎记得其他框架有一种方法将proc传递给一个方法,一旦环境"准备好"就会执行它.Rack有类似的东西吗?
我不相信机架应用程序可以提前知道“安装点”。例如,这config.ru
会在多个安装点安装同一个应用程序:
require 'rack'
app = proc { |env|
[200, {'Content-Type' => 'text/plain'}, ['hello, world!']]
}
run Rack::URLMap.new('/myapp' => app,
'/' => app)
Run Code Online (Sandbox Code Playgroud)
Rack 也不提供任何在初始化时调用的标准方法。我怀疑这是因为 Rack 试图支持普通的 CGI,其中可能会创建一个完整的 Ruby 进程来处理每个请求,并在每个请求时退出该进程。在这种情况下,“init”方法没有多大用处。