私が構築しているアプリでは、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 を受け入れています。