这似乎应该很简单,但我无法弄清楚如何在stylesheet
应用中将erb
链接到Cuba
模板。
hello_world.rb
require "cuba"
require "cuba/safe"
require "cuba/render"
require "erb"
Cuba.use Rack::Session::Cookie, :secret => "__a_very_long_string__"
Cuba.plugin Cuba::Safe
Cuba.plugin Cuba::Render
Cuba.define do
on root do
res.write view("home")
end
end
视图/ layout.erb
<!DOCTYPE html>
<html lang="en">
<head>
<link href="styles/basic.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div>
<h1>Hello</h1>
</div>
</body
</html>
config.ru
require "./hello_world"
run Cuba
风格/ basic.css
h1 {
font-size: 128px;
}
div {
padding: 50px;
margin: 100px;
}
我尝试使用一些Sinatra
标准,例如将css
放在名为public
的目录中以及使用<link href="<%= url('styles/basic.css') %>" rel="stylesheet" type="text/css" />
,但没有任何效果。
答案 0 :(得分:2)
古巴不提供静态资产。您可以使用Rack::Static
:
# hellow_world.rb
Cuba.use Rack::Static,
root: "public",
urls: ["/javascripts", "/css", "/images"]
然后,在您的视图中查看此文件夹。
# layout.erb
<link href="/public/css/basic.css" rel="stylesheet" type="text/css" />
答案 1 :(得分:0)
古巴应用程序是(薄)引擎下的Rack应用程序。
Rack应用程序是可以响应#call方法的任何对象,产生一个带有状态代码的数组,带有标题和主体的哈希。
Rack中间件与app基本相同。唯一的区别是他们在请求 - 响应周期中所扮演的角色:
运行应用程序时,将其与中间件堆栈一起运行。每个请求都从客户端通过堆栈传递到您的应用程序,然后它的响应从您的应用程序通过堆栈传递到客户端。
古巴并没有隐含地添加任何中间件或端点来处理静态文件。这意味着,如果任何一个中间件没有截获任何一个请求可以处理它并到达您的应用程序,然后您的应用程序没有处理它的路由,那么它将获得404&#39; d。
与此相反,Sinatra会隐式处理静态文件请求。
这就是运行
的原因Cuba.use Rack::Static,
root: "public",
urls: ["/javascripts", "/css", "/images"]
解决了您的问题,因为它添加了一个响应
中生成的请求的中间件<link href="/public/css/basic.css" rel="stylesheet" type="text/css" />
在您的应用需要之前。