我的 rails 应用程序有一个简单的模型链接,它跟踪与更新关联的所有 Url。
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 函数非常幼稚(仍在开发,所以它应该是:)),并且由于它在请求期间阻塞而造成了相当大的瓶颈,如果一次创建相当多的更新可能会很长一段时间,通常会创建几十个。由于更新/链接等需要快速显示给用户,这是一个问题。
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 还是比较陌生。对于这样的事情,最好的 Rails 方法是什么?一个“最终确定”功能,其中包括一个事件机器循环,以一次延长/创建所有链接,或者可能在模型中(以某种方式)执行,以便在创建一个异步任务时分拆异步任务?
感谢您的任何建议/资源