2010-01-26 2 views
0

Comment voir/modifier les données de session à partir d'un fil dans les rails? Voir cet extrait de code dans mon contrôleur:Accès `session` dans le rail du contrôleur de rails

def controller_action 
    session[:something] = 'before' # works properly 
    Thread.new do 
    session[:something] = 'after' # out of scope. <--- how do I fix this? 
    end 
end 

(lié à this question, mais beaucoup plus précis que j'attends des réponses tout à fait différentes..)

+1

Je n'utiliserais pas de threads comme celui-ci personnellement. Si vous avez un long processus d'exécution, l'utilisation d'un planificateur ou d'une file d'attente est la voie à suivre. –

+0

@Toby: Oui, d'accord. Ne pas enfiler si vous n'avez pas à le faire. DelayedJob ou quelque chose de similaire devrait mieux fonctionner ici. –

Répondre

0

Je ne suis toujours pas sûr de savoir pourquoi la session ne serait pas portée par référence à l'intérieur d'un fil, mais si cela est vrai, vous pouvez essayer de faire passer la liaison actuelle sur le fil comme argument:

Thread.new(binding) do 
    thread_session = eval("session", binding) 
end 

Ou quelque chose comme ça. Je ne suis toujours pas convaincu que la session est en valeur et non par référence dans le sujet. Pour vérifier cela, je viens de passer des hachages dans de nouveaux threads sur la console, et les modifications apportées à un hachage à l'intérieur d'un thread sont visibles en dehors de ce thread. Y a-t-il de la magie qui fait que la session se comporte différemment?

EDIT: DelayedJob ne serait pas un meilleur moyen de gérer un processus de longue durée dérivé d'une demande de l'utilisateur?

1

Pourquoi avez-vous besoin de changer les données de session dans un thread d'arrière-plan? Utilisez-vous le magasin de cookies par défaut, parce que si vous êtes, je ne sais pas comment cela fonctionnerait. Si vous deviez passer au magasin de session memcached/database, vous pourriez avoir plus de chance car vous pouvez accéder à la session une fois la requête terminée.

Questions connexes