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

现在我有

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

有没有涉及Rack的更聪明的方法?

最佳答案

Camping当前在静态文件上的立场(请记住要安装RubyGems的最新版本!)是服务器应该负责提供静态文件。

如果您使用camping-命令,那么public/-目录应自动为您服务。只需将cards.css移到public/cards.css中,然后localhost:3301/cards.css应该返回文件。

在生产环境中,您应该配置Apache/Nginx/whatever,以便直接从public/-目录提供文件。

如果您无法配置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])

(这是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
...

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

另外,最新版本的Camping具有serve -method,可为您处理Content-Type。您可以将 Controller 简化为:
class Style < R '/style.css'
  def get
    serve "cards.css", File.read("cards.css")
  end
end

对于这些错误的文档,我将深表歉意。现在你

关于ruby - 如何提供静态文件? (css),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12982620/

10-08 23:13