如何提供静态文件?(CSS)

Col*_*nic 4 ruby rack camping

在Camping中,如何最好地提供静态文件,例如css?


现在我有

class Style < R '/cards.css'
    def get
         @headers["Content-Type"] = "text/css"
         File.read('cards.css')
    end
end 
Run Code Online (Sandbox Code Playgroud)

还有更聪明的方式涉及Rack吗?

Mag*_*olm 8

Camping的当前(记得从RubyGems安装最新版本!)对静态文件的立场是服务器应该负责提供静态文件.

如果使用camping-command,public/则应自动为您提供-directory.只需移动cards.csspublic/cards.css与本地主机:3301/cards.css应该返回文件.

在生产中,您应该直接从public/-directory 配置Apache/Nginx /以及提供文件的任何内容.


如果您无法配置Apache/Nginx(例如在Heroku中),您可以像这样编写自定义config.ru:

# Your Camping app:
app = MyApp
# Static files:
files = Rack::File.new('public')

# First try the static files, then "fallback" to the app 
run Rack::Cascade.new([files, app], [405, 404, 403])
Run Code Online (Sandbox Code Playgroud)

(这就是Camping :: Server在内部的作用:https://github.com/camping/camping/blob/5201b49b753fe29dc3d2e96405d724bcaa7ad7d4/lib/camping/server.rb#L151)


对于小文件,您可以将它们存储在app.rb的DATA块中:https://github.com/camping/camping/blob/5201b49b753fe29dc3d2e96405d724bcaa7ad7d4/test/app_file.rb#L37

如果要将所有内容保存在一个文件中,这也很有用.

Camping.goes :Foo

__END__

@@ /cards.css
...
Run Code Online (Sandbox Code Playgroud)

Camping将使用文件扩展名来设置正确的Content-Type.


此外,最新版本的Camping还有一个serve为您处理Content-Type的方法.您可以将控制器简化为:

class Style < R '/style.css'
  def get
    serve "cards.css", File.read("cards.css")
  end
end
Run Code Online (Sandbox Code Playgroud)

我不得不为糟糕的文件道歉.现在你