Sinatra show view /example/:id returns 资产出现 404 错误,使用链轮时
Sinatra show view /example/:id returns 404 error for assets, when using sprockets
当我访问时:
get "/example/:id" do
...
slim :'example/show'
end
我收到这个错误:
"GET /example/assets/app.css HTTP/1.1" 404
"GET /example/assets/app.js HTTP/1.1" 404
我怀疑 :id
可能是个问题,因为
我的资产设置在我访问时有效:
get "/example" do
...
slim :'example/index'
end
作品:
"GET /assets/app.css HTTP/1.1" 304
"GET /assets/app.js HTTP/1.1" 200
我的链轮设置:
class App < Sinatra::Base
set :environment, Sprockets::Environment.new
environment.append_path "assets/stylesheets"
environment.append_path "assets/javascripts"
environment.js_compressor = :uglify
environment.css_compressor = :scss
get "/assets/*" do
env["PATH_INFO"].sub!("/assets", "")
settings.environment.call(env)
end
...
end
我的完整回购但没有最后更改:https://github.com/aneta-bielska/home-for-paws-app
在您的布局中,您有以下几行定义资产的链接:
link rel="stylesheet" href="assets/app.css"
script src="assets/app.js"
由于这些元素中的 url 不以斜杠开头,浏览器将它们视为相对于它们出现的页面。这意味着当您访问 /example
时,链接会转到 /assets/app.cs
和 /assets/app.js
。但是,当您转到例如 example/1
时,链接将被视为相对于 1
,因此浏览器会尝试获取 /example/assets/app.cs
(对于 app.js
也是如此)。
您需要确保这些链接始终被视为绝对链接。最简单的方法是在开头添加一个 /
:
link rel="stylesheet" href="/assets/app.css"
script src="/assets/app.js"
一个更强大的解决方案可能是使用 Sinatra’s url
helper 来确保您始终创建正确的链接,因为它会考虑将应用程序安装在服务器上的不同路径:
link rel="stylesheet" href=url("/assets/app.css")
script src=url("/assets/app.js")
当我访问时:
get "/example/:id" do
...
slim :'example/show'
end
我收到这个错误:
"GET /example/assets/app.css HTTP/1.1" 404
"GET /example/assets/app.js HTTP/1.1" 404
我怀疑 :id
可能是个问题,因为
我的资产设置在我访问时有效:
get "/example" do
...
slim :'example/index'
end
作品:
"GET /assets/app.css HTTP/1.1" 304
"GET /assets/app.js HTTP/1.1" 200
我的链轮设置:
class App < Sinatra::Base
set :environment, Sprockets::Environment.new
environment.append_path "assets/stylesheets"
environment.append_path "assets/javascripts"
environment.js_compressor = :uglify
environment.css_compressor = :scss
get "/assets/*" do
env["PATH_INFO"].sub!("/assets", "")
settings.environment.call(env)
end
...
end
我的完整回购但没有最后更改:https://github.com/aneta-bielska/home-for-paws-app
在您的布局中,您有以下几行定义资产的链接:
link rel="stylesheet" href="assets/app.css"
script src="assets/app.js"
由于这些元素中的 url 不以斜杠开头,浏览器将它们视为相对于它们出现的页面。这意味着当您访问 /example
时,链接会转到 /assets/app.cs
和 /assets/app.js
。但是,当您转到例如 example/1
时,链接将被视为相对于 1
,因此浏览器会尝试获取 /example/assets/app.cs
(对于 app.js
也是如此)。
您需要确保这些链接始终被视为绝对链接。最简单的方法是在开头添加一个 /
:
link rel="stylesheet" href="/assets/app.css"
script src="/assets/app.js"
一个更强大的解决方案可能是使用 Sinatra’s url
helper 来确保您始终创建正确的链接,因为它会考虑将应用程序安装在服务器上的不同路径:
link rel="stylesheet" href=url("/assets/app.css")
script src=url("/assets/app.js")