2013-07-01 4 views
19

랙 미들웨어 필터는 초기화 및 호출 메소드가있는 Ruby 클래스입니다. 호출 메서드가 "env"인수를 사용한다는 것을 알고 있습니다. 다음과 같은 것 :랙 미들웨어의 "env"변수는 무엇입니까?

class MyFilter 
    def initialize(app) 
    end 

    def call(env) 
    end 
end 

내 질문은 : "env"인수는 정확히 "호출"로 전송됩니까? 이것은 Rails ENV 환경 (즉, 개발, 테스트, 생산)과 동일합니다.

감사합니다.

답변

32

env은 해시입니다. 랙 자체와 다양한 미들웨어는 가치를 더합니다.

해시에있는 다양한 키를 이해하려면 Rack Specification을 확인하십시오.

{ 
    "GATEWAY_INTERFACE" => "CGI/1.1", 
    "PATH_INFO" => "/index.html", 
    "QUERY_STRING" => "", 
    "REMOTE_ADDR" => "::1", 
    "REMOTE_HOST" => "localhost", 
    "REQUEST_METHOD" => "GET", 
    "REQUEST_URI" => "http://localhost:3000/index.html", 
    "SCRIPT_NAME" => "", 
    "SERVER_NAME" => "localhost", 
    "SERVER_PORT" => "3000", 
    "SERVER_PROTOCOL" => "HTTP/1.1", 
    "SERVER_SOFTWARE" => "WEBrick/1.3.1 (Ruby/2.0.0/2013-11-22)", 
    "HTTP_HOST" => "localhost:3000", 
    "HTTP_USER_AGENT" => "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:26.0) Gecko/20100101 Firefox/26.0", 
    "HTTP_ACCEPT" => "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", 
    "HTTP_ACCEPT_LANGUAGE" => "zh-tw,zh;q=0.8,en-us;q=0.5,en;q=0.3", 
    "HTTP_ACCEPT_ENCODING" => "gzip, deflate", 
    "HTTP_COOKIE" => "jsonrpc.session=3iqp3ydRwFyqjcfO0GT2bzUh.bacc2786c7a81df0d0e950bec8fa1a9b1ba0bb61", 
    "HTTP_CONNECTION" => "keep-alive", 
    "HTTP_CACHE_CONTROL" => "max-age=0", 
    "rack.version" => [1, 2], 
    "rack.input" => #<StringIO:0x007fa1bce039f8>, 
    "rack.errors" => #<IO:<STDERR>>, 
    "rack.multithread" => true, 
    "rack.multiprocess" => false, 
    "rack.run_once" => false, 
    "rack.url_scheme" => "http", 
    "HTTP_VERSION" => "HTTP/1.1", 
    "REQUEST_PATH" => "/index.html" 
} 

그리고 쉽게 사용할 수 있도록하기 위해, 체크 아웃 Rack::Request 더 쉽게 ENV 해시 내부의 값에 액세스 할 수 있습니다 : 여기

그리고

은 샘플 ENV 해시입니다.

8

간단한 프로그래밍을 작성하면서 'env'변수를 인쇄해볼 수 있습니다.

require "rubygems" 
require "rack" 
def pp(hash) 
    hash.map {|key,value| "#{key} => #{value}"}.sort.join("<br/>") 
end 
Rack::Handler::WEBrick.run lambda {|env| [200,{},[pp(env)]]} , :Port=>3000 

링크 로컬 호스트를 입력 3000

+0

끝내 주셔서 감사합니다. – User314159

+0

exemples, thanks 덕분에 배우는 것보다 낫지 않습니다! –

5

env 변수 상류로 추가되어있다 요청 헤더와 본체를 포함하여 많은 유용한 정보를 포함 해시 및 런타임 환경 데이터는 미들웨어.

+0

응답 해 주셔서 감사합니다! – User314159

0

웹 서버에 따라 source code을 보면 env 해시에서 다른 값을 얻을 수 있습니다. documentation의 내용을 사용하여 에만을 사용하는 것이 좋습니다.

기본적으로 env는 웹 서버에 특정한 요청 개체의 해시 버전입니다. 랙은 정규화 된 환경을 제공하기 위해 일부 작업을 수행하므로 미들웨어는 웹 서버에서 일관되게 작동 할 수 있습니다.

관련 문제