Получите абсолютный (основной) URL в sinatra

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

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

смочь использовать опции base_url в HAML index.haml. Но я уверен, что существует намного лучшее, DRY, способ сделать это. Все же я не вижу, ни нахожу его. (Я плохо знаком с Sinatra :))

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

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

18
задан berkes 1 June 2010 в 13:41
поделиться

1 ответ

Пара моментов.

  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 или представлении), лучше задать его вручную.

25
ответ дан 30 November 2019 в 05:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: