Я создаю приложение Facebook под названием Lovers , использующее приложение Sinatra на Heroku .Он работает на Ruby 1.9.2 в стеке Heroku bamboo-mri-1.9.2 .
Это модульное приложение Sinatra и в источнике Loversкод , я даю каждому экземпляру приложения Sinatra (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-запрос?
ОБНОВЛЕНИЕ:
Я прочитал о Heroku Dynos .По-видимому, каждый dyno (процесс) запускает экземпляр Lovers::Application
.Итак, после прочтения о совместного использования глобальной переменной между процессами , я думаю, это означает, что если я определю переменную класса @@hit_count
в классе Lovers::Application
, она будет иметь разные значения в зависимости от того, какой dyno получитзапрос, при условии, что я увеличиваю @@hit_count
каждый раз, когда запрашивается домашняя страница, то есть:
@@hit_count = 0
get "/" do
@@hit_count += 1
end