2

私が構築しているアプリでは、trumpia を使用して、SMS と電子メール メッセージをスケジュールしてユーザーに送信しています。彼らがサインアップするとき、私はオブザーバーを使用して trumpia への呼び出しをトリガーし、ファラデーを使用して実際に trumpia API に接続しています。私の問題は、これらの呼び出しに時間がかかることであり、バックグラウンドで処理する必要があります。また、すぐに実行する必要があるコマンドのセットが小さいため、after_create 全体を遅らせることはできません。

これを達成するためにdelayed_jobを使用することを考えていますが、私のコードのように複雑なものでそれを行う方法がわかりません. これどうやってするの?ファラデー呼び出しをメソッドに入れる必要があると思いますが、方法がわかりません。 - ありがとう

これが私のオブザーバーです。不要なコードは省きました。

class UserObserver < ActiveRecord::Observer

def after_create(user)
   #This first part should not be delayed
     @user = user
     kevin = User.find(1)
     user.increment!(:renewcash, by = 5)
     body = "Hi " + @user.name.split(' ', 2).first + ", ..."
     kevin.send_message(@user, body, "First message", sanitize_text=true, attachment=nil)

   # This whole second part needs to be delayed.
    conn = Faraday.new(:url => 'http://api.trumpia.com') do |faraday|
      faraday.request  :multipart 
      faraday.response :logger                  
      faraday.adapter  Faraday.default_adapter  
    end

    trumpia_body = {:list_name => ... .... }.to_json

    response = conn.put do |req|
       req.url '/rest/v1/XXXXXXXXX/subscription'
       req.headers['X-Apikey'] = 'XXXXXXXXXXXXX'
       req.headers['Content-Type'] = 'application/json'
       req.body = trumpia_body
    end

    response2 = conn.get do |req2|
       req2.url '/rest/v1/XXXXXXXX/subscription?row_size=1'
       req2.headers['X-Apikey'] = 'XXXXXXXXXXX'
       req2.headers['Content-Type'] = 'application/json'
    end
 end

Rails 3.2.8 を使用しています。しかし、私はまだ遅延ジョブをインストールしておらず、別の queing gem を受け入れています。

4

0 に答える 0