【问题标题】:Get absolute (base) url in sinatra在 sinatra 中获取绝对(基本)url
【发布时间】:2011-02-26 08:56:41
【问题描述】:

现在,我做一个

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

能够在 HAML index.haml 中使用 options.base_url。 但我确信有一种更好的、干燥的方式来做到这一点。然而我看不见,也找不到。 (我是 Sinatra 的新手 :))

不知何故,在 get 之外,我没有 request.env 可用,或者看起来是这样。所以把它放在一个包含中是行不通的。

你如何获得你的基本网址?

【问题讨论】:

  • options.base_url 怎么不干了?

标签: ruby sinatra haml


【解决方案1】:

您也可以使用request.base_url 获取它=D(看看rack/request.rb

【讨论】:

  • 这看起来是最好的方法,因为源代码基本上可以完成其他答案建议手动执行的操作,并且重要的是,如果端口不是默认的,则可以选择包含端口
【解决方案2】:

几件事。

  1. set 是一个类级别的方法,这意味着您正在通过每个请求修改整个应用的状态
  2. 以上是一个问题,因为在不同的请求(例如 http://foo.comhttps://foo.com 或者如果您有多个域使用 DNS 指向同一个应用服务器)时,基本 url 可能会有所不同

更好的策略可能是定义一个助手

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

如果您在响应查询之外需要基本 url(不在 get/post/put/delete 块或视图中),最好在某处手动设置。

【讨论】:

  • 谢谢。我读到了关于助手的文章,但还没有深入到深入的程度。谢谢。似乎答案就在那里:)
  • @base_url ||= "#{request.scheme}://#{request.host}"
  • 如果你没有在标准端口上运行你的 httpd(比如 https 的 443),可能需要添加 #{request.port}
猜你喜欢
  • 1970-01-01
  • 2012-10-23
  • 2011-02-02
  • 2010-09-12
  • 2011-09-09
  • 2013-07-25
  • 2023-04-07
  • 1970-01-01
相关资源
最近更新 更多