
require 'sinatra'GlobalState = {}GlobalState[:some_counter] = 0get '/' do response = "GlobalState[:some_counter]: #{GlobalState[:some_counter]}" GlobalState[:some_counter] += 1 responseend 这段代码没有错:如果你运行它并转到http:// localhost:4567,你会看到GlobalState [:some_counter]按预期增加.
但由于以下原因而不鼓励,主要与应用程序的Web性质有关:
>由于数据存储在Ruby对象中,因此如果停止服务器,则会丢失数据.但是,如果您不需要持久数据,那么这不是问题
>运行Web应用程序时,通常会同时拥有应用程序实例,以便同时处理多个请求.有几种方法可以实现它:
> Forks:同一应用程序的多个进程.它们不共享内存,因此Ruby全局状态变量变得无用
>线程:线程共享内存,因此您可以访问全局状态,但是您必须管理对同一个全局对象的并发访问,并带来非常重要的后果
>您无法将数据与用户关联,反之亦然:这是因为http不提供状态保留方法(它是stateless protocol).要解决它,您需要:
>客户端数据存储:cookies,HTML5本地存储……
>服务器端数据存储:会话(不仅仅是服务器端,至少需要将会话关联到相应的客户端,通常将会话ID存储到cookie中)
出于这些原因,Web应用程序数据管理并非易事.无论如何不要担心,你不必重新发明轮子;解决方案在手:
> Sinatra cookies用于客户端数据存储
> Sinatra sessions用于客户端 – 服务器数据共享>数据持久性数据库
以上是内存溢出为你收集整理的html – 在Sinatra请求之间共享Ruby变量全部内容,希望文章能够帮你解决html – 在Sinatra请求之间共享Ruby变量所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)