通过我正在构建的应用程序,我们使用 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。但我还没有安装延迟的工作,我对不同的排队宝石持开放态度。