Je construis un Facebook app called Lovers, en utilisant un Sinatra app on Heroku. Il fonctionne sur Ruby 1.9.2 sur Heroku's bamboo-mri-1.9.2 stack.Existe-t-il une instance d'application Rack par requête HTTP?
Il est un modular Sinatra app, et dans le Lovers source code, je donne chaque instance de l'application Sinatra (Lovers::Application
) une instance de 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
De cette façon, vous pouvez faire Lovers.application.facebook
pour accéder au Facebook::Application
exemple de n'importe où dans le module Lovers
, disons de Lovers::User
.
-t-il un sens, ou devrais-je avoir juste tous les cas de Lovers::Application
(si jamais il y a plus d'un) partagent la même Facebook::Application
instance, à savoir Lovers.facebook
. C'est ce que nous faisons pour Redis: Lovers.redis
, ce qui est logique pour moi. Je suppose que je penche pour le changer pour le dernier, mais je veux m'assurer avant de le changer. Qu'est-ce que tu penses?
Enfin, y a-t-il une instance de Lovers::Application
par requête HTTP?
MISE À JOUR:
J'ai lu sur Heroku Dynos. Apparemment, chaque dyno (processus) exécute une instance de Lovers::Application
. Donc, après avoir lu environ sharing a global variable among processes, je pense que si je définis une variable de classe @@hit_count
dans la classe Lovers::Application
, elle aura des valeurs différentes selon le dyno qui reçoit la requête, en supposant que j'augmente @@hit_count
chaque fois que la page d'accueil est demandée, c.-à-d. :
@@hit_count = 0
get "/" do
@@hit_count += 1
end
Pouvez-vous élaborer sur quelques idées possibles pour garder l'état en dehors du processus? J'essaie de trouver une bonne solution pour le moment qui évite de stocker la valeur dans la base de données - quelque chose qui ne tombera pas dans un environnement à fort trafic. merci –
redis ou memcahe – jshen