3

这似乎应该很简单,但我不知道如何在应用程序中获取stylesheeterb模板的链接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>

配置.ru

require "./hello_world"
run Cuba

样式/basic.css

h1 {
   font-size: 128px;
}

div {
    padding: 50px;
    margin: 100px;
}

我曾尝试使用一些Sinatra标准,例如将我css的放在一个名为public以及 using的目录中,<link href="<%= url('styles/basic.css') %>" rel="stylesheet" type="text/css" />但没有任何效果。

4

2 回答 2

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" />
于 2016-06-23T19:00:03.933 回答
0

Cuba 应用程序是(薄)引擎盖下的 Rack 应用程序。

一个 Rack 应用程序是任何可以响应 #call 方法的对象,产生一个带有状态码的数组,一个带有标题的散列和一个正文。

Rack 中间件与应用程序基本相同。唯一的区别是它们在请求-响应周期中所扮演的角色:

  • 应用程序是请求链的最终目的地,也是生成原始响应的目的地。
  • 另一方面,中间件位于客户端和应用程序之间,在请求到达应用程序之前对其进行预处理,或者在应用程序生成它们之后对响应进行后处理。

当您运行您的应用程序时,您将与中间件堆栈一起运行它。每个请求从客户端通过堆栈到达您的应用程序,然后其响应从您的应用程序通过堆栈到达客户端。

Cuba 没有隐式添加任何中间件或端点来处理静态文件。这意味着如果一个请求没有被任何可以处理它并到达您的应用程序的中间件拦截,然后您的应用程序没有处理它的路由,它将得到 404'd。

与此相反,Sinatra 确实为您隐式处理静态文件请求。

这就是为什么跑步

Cuba.use Rack::Static,
  root: "public",
  urls: ["/javascripts", "/css", "/images"]

解决了您的问题,因为它添加了一个中间件,该中间件将响应在

<link href="/public/css/basic.css" rel="stylesheet" type="text/css" />

在您的应用需要之前。

于 2018-03-26T07:32:27.877 回答