代码之家  ›  专栏  ›  技术社区  ›  berkes

获取sinatra中的绝对(基本)url

  •  17
  • berkes  · 技术社区  · 14 年前

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

    能够在HAML index.HAML中使用options.base\u url。 但我相信有一个更好的,干燥的,这样做的方式。但我看不见,也找不到(我是新来西纳特拉的:))

    ,我没有可用的request.env,或者看起来是这样。所以把它放进一个include里是行不通的。

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

    2 回复  |  直到 14 年前
        1
  •  26
  •   BaroqueBobcat    14 年前

    几件事。

    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块或视图中),最好在某个地方手动设置它。

        2
  •  40
  •   epidemian    12 年前

    request.base_url 太=D(看看 rack/request.rb )