我建立一个Facebook app called Lovers,使用Sinatra app on Heroku。它在Heroku's bamboo-mri-1.9.2 stack上运行在Ruby 1.9.2上。每个HTTP请求是否有一个Rack应用程序实例?
这是一个modular Sinatra app,而在Lovers source code,我给西纳特拉的应用程序的每个实例(Lovers::Application
)的Facebook::Application
一个实例:
require 'sinatra/base'
class Lovers::Application < Sinatra::Base
attr_reader :facebook
def initialize(app=nil)
@facebook = Facebook::Application.new(
Lovers::Conf.fb_app_id,
Lovers::Conf.fb_app_secret,
Lovers::Conf.fb_canvas_name)
super(app)
end
# ...
end
这样一来,你可以做Lovers.application.facebook
访问Facebook::Application
实例从Lovers
模块中的任何地方,例如从Lovers::User
。
这是否有意义,或者我应该只有Lovers::Application
(如果有多个)共享相同的Facebook::Application
实例,即Lovers.facebook
的所有实例。这就是我们为Redis所做的:Lovers.redis
,这对我很有意义。我想我倾向于将它改变为后者,但我想确保在我改变它之前。你怎么看?
最后,有没有的Lovers::Application
每个HTTP请求的一个实例?
UPDATE:
我对Heroku Dynos读了。显然,每个dyno(进程)运行一个Lovers::Application
的实例。所以,阅读sharing a global variable among processes后,我认为这意味着,如果我定义的Lovers::Application
类的类变量@@hit_count
,它会根据其测功机接收请求,假设我增加每次请求主页时@@hit_count
,即不同的值:
@@hit_count = 0
get "/" do
@@hit_count += 1
end
你能否详细说明了一些可能的想法,饲养过程外的状态?我试图想出一个很好的解决方案,避免将数据存储在数据库中 - 这是在高流量环境下不会掉下来的问题。谢谢 – 2012-02-23 21:47:13