Ruby Singleton和猎枪

Ruby Singleton和猎枪,ruby,sinatra,shotgun,Ruby,Sinatra,Shotgun,我从Ruby开始,我们的团队负责人让我们学习Sinatra,重新加载应用程序的更改是由Shotgun完成的,我现在的问题是我有一个单例实体 我很想在两个请求之间保持状态,但每一个请求都会自动重启 如果您对此有任何帮助或解释,我们将不胜感激 提前感谢。除非在会话数据中保存应用程序的状态,否则您不应该期望在请求之间保存任何有关应用程序状态的信息(是否为散弹枪)。您不应该期望在请求之间保存任何有关应用程序状态的信息(是否为散弹枪)除非它保存在会话数据中。要使用Shotgun保持会话,您需要设置密钥。。

我从Ruby开始,我们的团队负责人让我们学习Sinatra,重新加载应用程序的更改是由Shotgun完成的,我现在的问题是我有一个单例实体 我很想在两个请求之间保持状态,但每一个请求都会自动重启

如果您对此有任何帮助或解释,我们将不胜感激


提前感谢。

除非在会话数据中保存应用程序的状态,否则您不应该期望在请求之间保存任何有关应用程序状态的信息(是否为散弹枪)。

您不应该期望在请求之间保存任何有关应用程序状态的信息(是否为散弹枪)除非它保存在会话数据中。

要使用Shotgun保持会话,您需要设置密钥。。。否则,每次页面加载都会重置它

enable :sessions
set :session_secret, "yourKey" 

要使用散弹枪持续会话,您需要设置密钥。。。否则,每次页面加载都会重置它

enable :sessions
set :session_secret, "yourKey" 

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