0

Rails 内で、Event Machine を使用する Google C2DM Ruby ライブラリである GroupMe gem EM-C2DM、https://github.com/groupme/em-c2dmを使用しようとしています。Heroku 固有の構成があるため、Heroku で動作するはずですが、実行できないようです。

Resque Worker を介して実行していますが、Worker は正しく動作し、キューに入れられて呼び出されます。ただし、認証を通過することはなく、プッシュ通知の応答について報告することはありません。決して終わらないようです。

  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

EM::next_tick または EM.next_tick を使用せずに試してみましたが、認証を通過しましたが、何もプッシュしたり、応答などを返したりすることはありません。実際には EM::next_tick には入りません。

これを機能させる方法についてのアイデアはありますか? これはHerokuで、Rails 3.1.1 with Thinを使用しています

私の 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
4

1 に答える 1

0

EM.run に入れると問題が解決しました。Workers は Thin に接続しないため、独自の Reactor を実行する必要があると思います

于 2012-06-07T12:26:38.783 に答える