Question

D'accord, c'est une tâche simple.Après avoir rendu le code HTML au client, je souhaite exécuter un appel à la base de données avec les informations de la demande.

J'utilise Sinatra parce que c'est un microframework léger, mais je suis vraiment prêt à tout en Ruby, si c'est plus rapide/plus facile (Rack ?).Je veux juste obtenir l'URL et rediriger le client ailleurs en fonction de l'URL.

Alors, comment procéder avec rack/sinatra, un véritable after_filter.Et par after_filter, je veux dire après l'envoi de la réponse au client.Ou est-ce que ce n'est tout simplement pas réalisable sans threads ?

J'ai créé Sinatra et ajouté des filtres after, mais il n'y a aucun moyen de vider la réponse, même send_data qui est censé diffuser des fichiers (ce qui est évidemment pour le binaire) attend les after_filters.

J'ai vu cette question: Réponse en plusieurs parties en Ruby mais la réponse est pour les rails.Et je ne sais pas si cela envoie vraiment la réponse au client et permet ensuite le traitement par la suite.

Rack::Callbacks comporte des rappels avant et après, mais même ceux-ci semblent s'exécuter avant que la réponse ne soit envoyée au client, voici Rack : Rappels mise en œuvre (commentaire ajouté):

def call(env)
  @before.each {|c| c.call(env) }
  response = @app.call(env)
  @after.each {|c| c.call(env) }
  response 
  #i am guessing when this method returns then the response is sent to the client.
end

Je sais donc que je pourrais appeler une tâche en arrière-plan via le shell avec rake.Mais ce serait bien de ne pas en avoir trop...Il y a aussi JamaisBloquer mais est-ce bon pour exécuter un processus séparé sans retarder la réponse ou cela ferait-il quand même attendre l'application dans son ensemble (je pense que ce serait le cas) ?

Je sais que c'est beaucoup, mais en bref, c'est simple after_filter qui s'exécute vraiment après l'envoi de la réponse dans ruby/sinatra/rack.

Merci d'avoir lu ou répondu à ma question !:-)

Était-ce utile?

La solution

Le port run_later modifié sur rails pour faire l'affaire, le fichier est disponible ici :

http://github.com/pmamediagroup/sinatra_run_later/tree/master

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top