2012-06-07 1 views
0

Tentative d'utilisation de la gemme GroupMe EM-C2DM, https://github.com/groupme/em-c2dm, une bibliothèque Google C2DM Ruby utilisant Event Machine, dans Rails. Je sais que ça devrait marcher sur Heroku car il y a une configuration spécifique à Heroku, mais je n'arrive pas à la faire fonctionner.EventMachine sur Heroku avec Rails et Gemme EM-C2DM

Je m'exécute via un Resque Worker, et le worker fonctionne correctement et est mis en file d'attente et appelé. Cependant, il ne réussit jamais à s'authentifier et ne signale jamais la réponse de la notification push. Il semble juste ne jamais finir.

module PushAndroid 

    require "eventmachine" 
    require "em-c2dm" 

    @queue = :android_push 

    def self.perform(opts) 
    puts "entering android push" 
    EM.next_tick do 
     EM::C2DM.authenticate(ENV["C2DM_EMAIL"], ENV["C2DM_PASSWORD"]) 
     @push = Push.find(opts['push_id']) 
     message = "Message #{@push.title}" 
     push_id = "#{@push.id}" 
     opts['tokens'].each{ |token| 
     EM::C2DM.push(token, :message => message, :push_id => push_id) do |response| 
      if response.success? 
       puts "success! id=#{response.id}" # ID of sent message 
      else 
       puts "response:" 
       puts response.inspect 
       #case response.error 
       #when "InvalidToken" 
        # reauthenticate 
       #when "InvalidRegistration" 
        # clear our registration id 
       #when "RetryAfter" 
        # pause sending for response.retry_after seconds 
       #end   
      end 
     end 
     } 
    end 
    end 
end 

J'ai aussi essayé sans utiliser EM :: next_tick ou EM.next_tick et il obtient l'authentification passé, mais pousse jamais rien, ne renvoie une réponse ou quoi que ce soit. Il n'entre jamais EM :: next_tick en fait.

Des idées pour que cela fonctionne? Ceci est sur Heroku, en utilisant Rails 3.1.1 avec Thin

De mon Gemfile.lock:

thin (1.3.1) 
     daemons (>= 1.0.9) 
     eventmachine (>= 0.12.6) 
     rack (>= 1.0.0) 

eventmachine (1.0.0.beta.4) 

    em-apn (0.0.3) 
     eventmachine (>= 1.0.0.beta.3) 
     yajl-ruby (>= 0.8.2) 
    em-http-request (1.0.2) 
     addressable (>= 2.2.3) 
     cookiejar 
     em-socksify 
     eventmachine (>= 1.0.0.beta.4) 
     http_parser.rb (>= 0.5.3) 
    em-socksify (0.2.0) 
     eventmachine (>= 1.0.0.beta.4) 

    remote: git://github.com/groupme/em-c2dm.git 
    revision: 2d853ff771908785f23b8c64fa5d5508b4eba40a 
    specs: 
    em-c2dm (0.0.1) 
     em-http-request (>= 1.0.0.beta.4) 
     eventmachine (>= 1.0.0.beta.3) 
     uuid 

Répondre

0

Mettre dans un EM.run a résolu le problème. Je suppose que les travailleurs ne se connectent pas à Thin, donc besoin de gérer leur propre réacteur

Questions connexes