私の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には比較的慣れていません。このようなものに最適なレールアプローチは何でしょうか?一度にすべてのリンクを延長/作成するイベントマシンループを含む「finalize」関数、またはモデル内で(何らかの方法で)実行して、作成されるたびに非同期タスクをスピンオフするようにしますか?
アドバイス/リソースをありがとう