【问题标题】:Ruby/Sinatra/erb: save html fleRuby/Sinatra/erb:保存 html 文件
【发布时间】:2013-11-14 03:11:04
【问题描述】:

我写了一个网站来显示我们 api 的状态。

  • endpoints.rb 返回一个包含好端点和坏端点的哈希
  • apiStatusWebsite.rb 正在使用 endpoints.rb 并呈现 status.erb

代码:

require 'sinatra'
require 'endpoints.rb'  


def updateStatus                
    get '/status' do

        endpointObject = Endpoints.new(getApiServerURL("qa"))
        result = endpointObject.checkApiStatus() 

        erb :status, :locals => { :apiData => result} 

    end
end
  • status.erb 与 html 内容

问题:

1) api 允许每 100 秒 100 个请求。当 3 个人调用 api 状态站点时,服务器向每个用户发出 45 个请求 api -> 服务器被禁止 100 秒,状态站点无用。

2) 我可以为问题 1 发送一个特殊的标头,但是状态站点可能会被滥用以在 api 上施加负载(不太可能但仍然可能)

可能的解决方案:

/status 仅显示 api 状态,但不调用 endpointObject.checkApiStatus()。此检查过程应在后台某处每 2 分钟自动发生一次,并创建一个 html 文件。此 html 文件将从 apiStatusWebsite2.rb 加载

 require 'sinatra'

 get '/status' do

   send_file 'status.html'

 end

但是如何保存当前 apiStatusWebsite.rb 呈现的这个 html 文件呢?

【问题讨论】:

  • 为什么不缓存来自 API 的响应呢?无需保存 HTML 文件。
  • 谢谢尝试,但你能告诉我如何在 sinatra 中使用缓存吗,我是新手。

标签: ruby sinatra erb


【解决方案1】:

您需要一些方法来保存从 API 返回的值。使用 HTML 文件是一种有效的方式,但还有更好的选择。最好只转储没有 HTML 的响应,但更好的方法是将它保存在内存中,并且仅在应用程序关闭或一段时间没有调用时转储它。您也不必转储到文件,您可以使用数据库或任何类型的持久存储。 There are libraries that will handle or help with this。看看some of these libraries too,然后你会更好地了解你可能想尝试的事情。

另外,考虑缓存来自 Sinatra 的响应以停止频繁访问 API,请参阅 this article that gives a quick intro to caching responses with SinatraCache Control in the Sinatra docs

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-26
    • 2016-10-09
    • 2013-11-13
    • 1970-01-01
    • 2015-12-31
    • 2015-12-06
    • 2012-12-30
    相关资源
    最近更新 更多