【问题标题】:Layout paths not working in Sinatra布局路径在 Sinatra 中不起作用
【发布时间】:2017-07-24 21:12:53
【问题描述】:

对 Web 框架使用 Sinatra,对页面使用 HAML,我在 /views/layout.haml 有一个布局文件。我在/public 中也有 javascript 和 css 文件。布局内的脚本和 css 的定义与此类似:

%script{:type => "text/javascript", :src => "test.js"}
%link{:rel => "stylesheet", :type => "text/css", :href => "test.css"}

当我在 Sinatra 中定义了基本路线时,一切正常:

get '/' do
  haml :index
end

但是当路径有多个部分时,例如“/route/1”,到test.jstest.css 的路径突然不再工作。 haml 文件加载正常,但布局中的路径不再有效。

在尝试了一些之后,如果我将路径更改为 "//public/test.js" 之类的东西,而不仅仅是 "test.js",它会再次加载...但仅适用于路线 /route/1。不幸的是,第一条路线/ 不再加载。

在 Sinatra 中通常如何处理这样的路由?

【问题讨论】:

    标签: ruby sinatra haml


    【解决方案1】:

    您只需要确保您的网址是绝对的。

    使用:src => "test.js",浏览器将发出相对于当前网址的请求。因此,对于根 /,请求将针对 /test.js 并且可以工作,但是当当前页面为 /route/1 时,请求将转到 /route/test.js 并且会失败。

    直接的解决方法是在url中添加/,使路径成为绝对路径:

    %script{:type => "text/javascript", :src => "/test.js"}
    

    更强大的解决方案是使用url helper

    %script{:type => "text/javascript", :src => url("/test.js")}
    

    这将确保您的应用即使安装在网络服务器根目录以外的其他位置也能正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-13
      • 1970-01-01
      • 1970-01-01
      • 2016-11-04
      • 2013-07-06
      • 2012-05-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多