2

通过我正在构建的应用程序,我们使用 trumpia 来安排并向我们的用户发送短信和电子邮件消息。当他们注册时,我正在使用观察者来触发对 trumpia 的调用,并且我正在使用 faraday 来实际连接 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

我正在使用导轨 3.2.8。但我还没有安装延迟的工作,我对不同的排队宝石持开放态度。

4

0 回答 0