我正在尝试在sinatra中编写一个简单的问答游戏,我需要为所有用户提供可访问的公共对象(大厅状态,聊天消息等)。问题是Sinatra在每个请求和对象变为初始状态后重新加载代码。如何实现呢?
答案 0 :(得分:10)
嗯,这个话题有点棘手。 Sinatra实际上没有重置服务器状态:
require 'sinatra'
GlobalState = {}
GlobalState[:some_counter] = 0
get '/' do
response = "GlobalState[:some_counter]: #{GlobalState[:some_counter]}"
GlobalState[:some_counter] += 1
response
end
此代码没有错:如果您运行它并转到http://localhost:4567
,您会看到GlobalState[:some_counter]
按预期增加。
但是因为以下原因而不鼓励,主要与应用程序的Web性质有关:
出于这些原因,Web应用程序数据管理并非易事。无论如何不要担心,你不必重新发明轮子;解决方案在手:
答案 1 :(得分:0)
没有某种类型的持久存储,没有办法做到这一点。您必须将信息存储在数据库或cookie中。