ruby相当于php' $ _SERVER [' REQUEST_URI']

时间:2014-10-16 20:29:18

标签: ruby passenger

我是红宝石的新手。我在Ubuntu上安装了apache的phusion-passenger。 php的$ _SERVER ['REQUEST_URI']或任何php的$ _SERVER变量是否有ruby等价物?

我没有使用Sinatra或rails,因为我只是想学习如何首先使用ruby。

2 个答案:

答案 0 :(得分:2)

如果您有这样一个简单的Rack服务器:

require 'rack'
require 'rack/server'

class EnvInspector
  def self.call(env)
    [200, {}, [env.inspect]]
  end
end

run EnvInspector

它会返回这样的内容,告诉你env变量中的所有键:

{
  "SERVER_SOFTWARE"=>"thin 1.4.1 codename Chromeo",
  "SERVER_NAME"=>"localhost",
  "rack.input"=>#<StringIO:0x007fa1bce039f8>,
  "rack.version"=>[1, 0],
  "rack.errors"=>#<IO:<STDERR>>,
  "rack.multithread"=>false,
  "rack.multiprocess"=>false,
  "rack.run_once"=>false,
  "REQUEST_METHOD"=>"GET",
  "REQUEST_PATH"=>"/favicon.ico",
  "PATH_INFO"=>"/favicon.ico",
  "REQUEST_URI"=>"/favicon.ico",
  "HTTP_VERSION"=>"HTTP/1.1",
  "HTTP_HOST"=>"localhost:8080",
  "HTTP_CONNECTION"=>"keep-alive",
  "HTTP_ACCEPT"=>"*/*",
  "HTTP_USER_AGENT"=>
  "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11",
  "HTTP_ACCEPT_ENCODING"=>"gzip,deflate,sdch",
  "HTTP_ACCEPT_LANGUAGE"=>"en-US,en;q=0.8",
  "HTTP_ACCEPT_CHARSET"=>"ISO-8859-1,utf-8;q=0.7,*;q=0.3",
  "HTTP_COOKIE"=> "_gauges_unique_year=1;  _gauges_unique_month=1",
  "GATEWAY_INTERFACE"=>"CGI/1.2",
  "SERVER_PORT"=>"8080",
  "QUERY_STRING"=>"",
  "SERVER_PROTOCOL"=>"HTTP/1.1",
  "rack.url_scheme"=>"http",
  "SCRIPT_NAME"=>"",
  "REMOTE_ADDR"=>"127.0.0.1",
  "async.callback"=>#<Method: Thin::Connection#post_process>,
  "async.close"=>#<EventMachine::DefaultDeferrable:0x007fa1bce35b88
}

所以env['REQUEST_URI']等同于php $_SERVER['REQUEST_URI']

有关如何使用Rack的更多示例,请参阅http://hawkins.io/2012/07/rack_from_the_beginning/

答案 1 :(得分:1)

  

我没有使用Sinatra或rails,因为我只是想学习如何首先使用ruby。

Ruby并不假定Web服务器。它是一种独立的编程语言。如果您使用的是Web开发框架,它将为您提供对此类数据的访问权限。

Rails和Sinatra都使用Rack,它使用request object来访问这些数据。 REQUEST_URI变量对应于包含查询字符串的路径; fullpath方法用于访问它:

# get '/articles'
request.fullpath # => '/articles'

# get '/articles?page=2'
request.fullpath # => '/articles?page=2'

所有这些框架中的基本API都是相同的。供参考: