Railsコントローラー内でEventMachine(SuperFeeder-Ruby Gem)を使用する方法は?
-
27-10-2019 - |
質問
これを見てくれてありがとう。
残念ながら、私はRailsに慣れていません。現在、SuperFeedRが更新をプッシュできるエンドポイントを実装する必要がありますが、そのエンドポイントはRailsコントローラーにある必要があります。
当初、これは実行されるバックグラウンドジョブであるべきであり、Webの残りの部分は同意する傾向があるように思われましたが、私はこれをRailsコントローラーとして含めるように圧力をかけられています。 eventmachineをリクエスト/応答サイクルに含める方法はわかりません。
Webには例がたくさんあることは知っていますが、これをどのようにルーティングするかについての私の質問に本当に答える人はいません。何も思いつきません。
SuperFeedsと呼ばれるRailsコントローラーがあります。 SuperFeederにMyrailSapp/SuperFeeds/のようなものに更新をプッシュしてもらいたい
内部フィードプッシュコンテンツを検査し、その結果を実際にモデルを持ち、それを持続する別のコントローラーに書き込みます。
基本的に、フィードと呼ばれるコントローラーは、情報を受け取って渡すだけです。しかし、これは私を混乱させます。なぜなら、Railsコントローラーの内部で長く実行されているプロセスである何かを実装しなければならないように思われるからです。そして、これが機能するかどうかさえわかりません。
これがRailsで行われたが、EventMachineをバックグラウンドジョブとして使用していない方法を知っている人はいますか?結局、私は本当にこれが可能であることを知る必要があります。
-l
解決
内部フィードプッシュコンテンツを検査し、その結果を実際にモデルを持ち、それを持続する別のコントローラーに書き込みます。
1つのコントローラーですべての作業をしてみませんか?さまざまな懸念を分離しようとしている場合は、2つのモデルを使用することもできます。たとえば、1つは検査/解析を行い、1つは持続することを処理するためです。ただし、コントローラーからコントローラーにデータを渡す必要があるか、コントローラーにデータを渡すことはめったにありません。
eventmachineをリクエスト/応答サイクルに含める方法はわかりません。
自分でSuperFeedrを使用したことはありませんが、ドキュメントをすぐに見ました - XMPPまたはPubSubHubbbubクライアントを使用していますか?後者を想定していますか?もしそうなら、あなたは永続性(およびその他の時間のかかるプロセス)を実行したいです(およびasync(外側 リクエスト/応答サイクル)、右?
ThinなどのEventMachineベースのWebサーバーを使用している場合、基本的にすべての要求サイクルはEMリアクター内で実行されます。そのため、延期されたスレッドプールなどのタスクをオフロードするためにEMの施設を利用できます。このようなこの例については、チェックしてください エニグママチン, 、 特に ここ. 。 (さらに、DBクライアントライブラリは非同期である必要があると思います。)