如何使用法拉第在轨道观察器中使用延迟作业

时间:2013-03-19 21:55:26

标签: ruby-on-rails delayed-job faraday

通过我正在构建的应用程序,我们正在使用trumpia来安排和发送短信,并向我们的用户发送电子邮件。当他们注册时,我正在使用观察者来触发对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。但我还没有安装延迟工作,而且我对另一个排队的宝石持开放态度。

0 个答案:

没有答案