gpt4 book ai didi

ruby - Sinatra CSS/图像问题

转载 作者:数据小太阳 更新时间:2023-10-29 08:24:52 27 4
gpt4 key购买 nike

我有一个在本地运行的 sinatra 应用程序,不久前我在添加样式时遇到了问题。我将 CSS 文件放在 public/css/style.css 中,但它没有被提供。经过一些故障排除后,我发现了 Rack::Static 中间件并解决了当时的问题,我在 config.ru 中添加的行是:

use Rack::Static, :urls => ["/css", "/images"], :root => "public"

这让 Rack 分别从 public/csspublic/images 提供 css 和图像。当您在 Haml 中链接图像或样式时,您只需使用 css/style.css 并让公众远离。

我昨晚遇到的问题是,我在 views 目录中创建了一个小文件结构以更好地组织内容,所以现在当您访问呈现 views/contacts/_form.haml 的/contact/new 路径时 CSS 不起作用。查看页面上的源代码可以确认 Rack 正在尝试在 contacts/css/style.css 而不是 css/style.css 的正确路径提供 CSS,例如主索引正确显示。

我该如何解决这个问题,以确保它始终从 URL 的根开始呈现,而不是基于当前正在呈现的 View 的相对位置?我尝试在 config.ru 中制作 root => "#{File.dirname(__FILE__)/public" 但这没有帮助。

最佳答案

我不认为 View 模板的位置应该有任何区别,但如果你有像 css/style.css 这样的相对 URL,那么浏览器会将它附加到 URL 的路径部分托管它的页面。因此,如果页面 URL 是 contact/new,则有效 URL 将变为 contact/css/style.css

如果您在相对 URL 前加上“/”,例如 /css/style.css,它应该是相对于您要映射到公共(public)目录的站点的根路径。所以这可能是最好的方法:

  %link{ :href => '/css/style.css', :rel => 'stylesheet', :type => 'text/css' }

我还没有尝试使用 rackup 文件来配置静态文件。这在应用程序本身对我有用:

  set :static, true
set :root, File.dirname(__FILE__)
set :public, 'public'

但我认为 Sinatra 默认会提供来自公共(public)的静态文件,所以我认为不需要最后一行。

关于ruby - Sinatra CSS/图像问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6762642/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com