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