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

标签 ruby rack camping

在 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 的数据 block 中:https://github.com/camping/camping/blob/5201b49b753fe29dc3d2e96405d724bcaa7ad7d4/test/app_file.rb#L37

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

Camping.goes :Foo

__END__

@@ /cards.css
...

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


此外,最新版本的 Camping 有一个 serve 方法,可以为您处理 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/

相关文章:

mysql - 尝试使用 cPanel 添加子域或添加数据库时出错

ruby-on-rails - Rack session key 对于 memcached 来说太长了

ruby-on-rails - Rack 中间件 "trapping"堆栈跟踪

ruby - 用 camping 和 haml 渲染局部

ruby - 我如何接收对 ruby​​ 事件记录的聚合查询?

ruby - Stalker 超时 - 如何更改超时设置?

sql - 使用带连接的占位符

ruby - 如何为一次性 rake 任务覆盖 ruby​​ 中的方法?

ruby-on-rails - 如何在 Sinatra 中组织模型?

ruby - Camping 和 Sinatra 之间有什么重要区别吗?