我的Rails应用程序有一个简单的模型链接跟踪所有与更新相关的Url。Rails异步处理模型
class Link
include Mongoid::Document
include Mongoid::Timestamps
field :url, type: String
field :domain, type: String
attr_accessible :url, :domain
validates_uniqueness_of :url
has_and_belongs_to_many :updates
before_create :longenate
但在此之前我创建的对象,我想摆脱任何URL缩短的,由于种种原因链接一样长寿,和整体只是不顺心缩短服务。
目前我的longenate功能非常天真(仍然是deving,所以它应该是:)),并且创建了一个相当的瓶颈,因为它在请求期间阻塞了,如果创建了很多更新,这可能是相当长的一段时间一次,通常是几十个被创建。由于更新/链接等需要快速显示给用户,这是一个问题。
http_client = HTTPClient.new(:agent_name => "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 6.0)")
begin
head_res = http_client.head(url)
unless head_res.header['Location'].empty?
short_url = url
self.url = head_res.header['Location'][0]
end
rescue Exception => e
self.domain = "ERROR ACCESSING URI"
self.url = "Error Accessing URI, site down/non existant?"
end
我想换了这一点的东西非阻塞。我熟悉eventmachine,并用它来创建一些简单的服务和消费者,但对于rails还是比较新的。对于这样的事情,最好的钢轨方法是什么?一个“finalize”函数,包括一个事件机器循环来一次延长/创建所有链接,或者可能在模型中做某事(以某种方式),以便在创建时创建一个异步任务。
感谢您的任何意见/有资源