2014-10-16 4 views
0

Я новичок в рубине. У меня есть phusion-пассажир, установленный с apache на Ubuntu. Есть ли эквивалент ruby ​​для php $ _SERVER ['REQUEST_URI'] или любой переменной ph_ $ _SERVER?

Я не использую Sinatra или рельсы, потому что я просто пытаюсь научиться использовать Ruby в первую очередь.

+0

Если вы пытаетесь узнать только Ruby, тогда вам даже не нужно использовать Passenger или Apache, вам нужен только Ruby. Переменные, которые вы используете, являются стандартными и передаются из Apache через таблицу окружения, поэтому, да, Ruby может видеть их, глядя на «ENV», но вы должны полагаться на фреймворк, чтобы получить их и передать их вам. –

ответ

2

Если у вас есть простой сервер для монтажа в стойку, как это:

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'] будет эквивалентно РНР $_SERVER['REQUEST_URI']

См http://hawkins.io/2012/07/rack_from_the_beginning/ дополнительные примеры, как использовать Стеллаж.

+0

@John: Я обновил свой код. Измените '[200, {}, env.inspect]' на '[200, {}, [env.inspect]]'. – spickermann

+0

Снова я обновил свой ответ (последняя строка 'config.ru'). Похоже, что Rack API имеет значительные изменения, поскольку запись в блоге была написана. Извините, но я не могу проверить код на моей текущей машине в данный момент. – spickermann

+0

Хорошо! Это сработало.Он также предоставляет мне новые значения строки запроса при каждой загрузке страницы, что отвечает на мой другой вопрос. Спасибо, что помогли новичкам! – John

1

Я не пользуюсь синатрой или рельсами, потому что я просто пытаюсь научиться использовать рубин первым.

Ruby не предполагает использование веб-сервера. Это универсальный язык программирования, который стоит сам по себе. Если вы используете инфраструктуру веб-разработки, она предоставит вам доступ к таким данным.

И Rails, и Sinatra используют стойку, которая использует для доступа к этим данным request object. Переменная REQUEST_URI соответствует пути, включающему строку запроса; метод fullpath используется для доступа к нему:

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

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

Основной API является одинаковым во всех этих структурах. Для справки:

+0

Спасибо. Я проигрываю дни, пытаясь отличить роли и обязанности пассажира, апача, рубина, синатры ... поэтому, когда что-то пойдет не так, я часто схожу с неправильного пути в моем поиске и устранении неисправностей. Вот почему я полагаю, что, возможно, я должен просто придерживаться основ, использовать это, прежде чем изучать следующую вещь. – John

+0

Просто работайте с Ruby и Sinatra, и забывайте про проводку в Apache и Passenger. Как только вы поймете, как работают Ruby, Rack и Sinatra, Padrino или Rails, тогда остальное будет легче понять. –

Смежные вопросы