Подтвердить что ты не робот

Получить абсолютный (базовый) url в sinatra

Сейчас я делаю

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

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

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

Как вы получаете свой базовый url?

4b9b3361

Ответ 1

Несколько вещей.

  • set - это метод уровня класса, который означает, что вы изменяете все состояние приложения с каждым запросом.
  • Вышеприведенная проблема связана с тем, что, возможно, базовый 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 или в представлении), было бы лучше установить его где-то вручную.

Ответ 2

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