Ruby / Sinatra / erb:保存html文件

时间:2013-11-03 10:12:08

标签: ruby sinatra erb

我写了一个网站,显示我们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 with html content

问题:

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文件?

1 个答案:

答案 0 :(得分:0)

您需要某种方法来保留从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