Получить абсолютный (базовый) URL в синатре - PullRequest
18 голосов
/ 01 июня 2010

Прямо сейчас я делаю

get '/' do
  set :base_url, "#{request.env['rack.url_scheme']}://#{request.env['HTTP_HOST']}"
  # ...
  haml :index
end

для возможности использовать options.base_url в HAML index.haml. Но я уверен, что есть гораздо лучший, СУХОЙ способ сделать это. И все же я не могу ни увидеть, ни найти. (Я новичок в Синатре:))

Каким-то образом, за пределами get , у меня нет request.env или это так. Так что положить его во включенное не получилось.

Как вы получили свой базовый URL?

Ответы [ 2 ]

35 голосов
/ 27 апреля 2012

Вы можете получить его, используя request.base_url тоже = D (посмотрите rack / request.rb )

24 голосов
/ 01 июня 2010

Пара вещей.

  1. set - это метод уровня класса, который означает, что вы изменяете состояние всего приложения с каждым запросом
  2. Вышеприведенное является проблемой, поскольку потенциально базовый URL-адрес может отличаться для разных запросов, например http://foo.com и https://foo.com, или если у вас несколько доменов, направленных на один и тот же сервер приложений с использованием DNS

Лучшей тактикой может быть определение помощника

helpers do
  def base_url
    @base_url ||= "#{request.env['rack.url_scheme']}://#{request.env['HTTP_HOST']}"
  end
end

Если вам нужен базовый URL вне ответа на запросы (не в блоке get / post / put / delete или в представлении), было бы лучше установить его где-нибудь вручную.

...