【问题标题】:Ruby Singleton and ShotgunRuby Singleton 和 Shotgun
【发布时间】:2011-03-10 22:11:31
【问题描述】:

我从 Ruby 开始,我们的团队负责人派我们学习 Sinatra,重新加载应用程序更改是由 Shotgun 完成的,我现在的问题是我有一个 Singleton 实体 我希望在请求之间保持状态,但显然 Shotgun 重新启动是每个请求。

对此的任何帮助或解释都将不胜感激,

提前致谢。

【问题讨论】:

    标签: ruby sinatra shotgun


    【解决方案1】:

    您不应该期望在请求之间保存任何关于应用程序状态的信息(无论是否使用 Shotgun),除非它保存在会话数据中。

    【讨论】:

    • 是的,这就是会话的确切原因。 HTTP 是一种无状态协议,服务器不应保留连接之间的状态。
    • 我对 http 了解这一点,但这不是问题所在,我知道 HTTP 是无状态的,这就是为什么我使用该单例来存储请求之间的数据,甚至是不同用户的数据,所以这就是为什么会话对我不起作用的原因,现在也不想将数据存储到数据库中,这个想法只是在应用程序运行时保存数据,并且数据应该存储到整个对象中应用程序,这似乎在没有喊枪的情况下工作,(简单的 sinatra 'ruby app.rb'),但是当我来重新加载霰弹枪时它坏了
    • 不管它是一个不可靠的方法。在生产中,您可能会同时运行多个进程,并且它们将无法以这种方式相互共享。如果您重新启动 Web 服务器,或者它崩溃并自行重新启动,您将失去状态。如果您需要为所有用户存储持久数据,则需要在应用程序之外使用某种类型的持久数据存储(SQL、Redis、Memcached 等)。
    【解决方案2】:

    要使会话与 Shotgun 一起持续存在,您需要设置密钥...否则在每次页面加载时都会重置。

    enable :sessions
    set :session_secret, "yourKey" 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-24
      • 1970-01-01
      • 2021-04-22
      • 2012-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多