Sinatra全局应用程序变量

Joh*_*han 4 ruby sinatra

我有一个简单的Sinatra应用程序,我想在所有会话和请求中共享变量.

configure do
  @@click_count = 0
end

def send_message(text)
  # ignore, this part works
end

post '/click' do
  @@click_count = @@click_count + 1
  send_message "clicks: #{@@click_count}"
end
Run Code Online (Sandbox Code Playgroud)

发送的消息始终clicks: 1不是递增.我也试过set :click_count, 0,settings.click_count = settings.click_count + 1但我仍然得到同样的东西.

我用猎枪使用本地运行的服务器shotgun web.rb -p 4567 -E production,因为在非生产提到的另一个问题环境中,服务器是失去状态的每个请求重新启动.

任何想法如何让这个工作?

mat*_*att 5

Sinatra本身不会在开发模式(它曾经)的每个请求上重启,但是猎枪有这样的效果:

每次收到请求时,它都会分叉,在子进程中加载​​应用程序,处理请求并退出子进程.

简单地使用ruby web.rb,一切都应该工作(模数线程问题,你评论它看起来像你知道).