我的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」函數,包括一個事件機器循環來一次延長/創建所有鏈接,或者可能在模型中做某事(以某種方式),以便在創建時創建一個異步任務。
感謝您的任何意見/有資源