だから、私はRailsを使って小さなアプリケーションを構築しています。ユーザーステータスを変更するためのコマンドを少し使ってユーザーに通知するには、XMPPプロトを使用する必要があります。
以前のバージョンは、DBへのプレーンSQLリクエストでプレーンPython(かなり醜いアプリ)を使用するアプリケーションでした。テーブル「jabber_queue」があったため、別のスクリプトでは、ボットは1秒ごとに行をチェックし、処理(メッセージの送信)、削除を行っていました。シンプルでバカでしたが、大丈夫でした。
わかりました。このボット機能をRailsに統合する必要があります(少なくともRSpecで動作するため)。
これは、それがどのように行われるかについての私のいくつかのバージョンです。
分離された非同期キューソリューションを使用します。たとえば、Resque。分離されたRubyスクリプトを使用し、イベントをResqueにプッシュし、アプリケーションのイベントをポップします(DBに依存しないため、RSpecテストおよびテストDBに簡単に適合します)。しかし、それは私のアプリケーションを少し肥大化します-私は多くのメモリとCPUの追加要件を持つ2番目のDBを使用する必要があります-それは私の問題のオーバーヘッドになります。また、私はこのアプリケーションのために追加の「もの」をサポートしたくありません、私は知っています、それははるかに簡単な方法で行うことができます。
delayd_job(現在のAR DBを使用したキューソリューション)を使用します。しかし、Railsアプリケーションの現在のARDBを別のスクリプトで取得する方法がわかりません。とにかく、それは汚くて醜い方法です。
バックグラウンドワーカーとして、Railsアプリケーション内でXMPPボットを起動します。したがって、ワーカーは「現在の」AR(テストの場合はtest-DB)にアクセスできます。しかし、私は単にそれを行う方法がわかりません。Navvyを見つけましたが、Railsのどこかに「Navvy :: Job.enqueue(Cow、:speak)」のような文字列を開始する必要があります。これを開始するには、どこが最適かわかりません。 RSpecテストと「railsserver」を使用します。また、BackgrounDRbもありますが、このプロジェクトはNavvyに似ており、非アクティブでもあります。stackoverflowで検索を使用して、私と同様の問題を見つけましたが、解決策はbackground_jobにつながります。これはバックグラウンドで何でも可能ですが、別のスクリプトで現在のARDBアクセスを取得する方法がわかりません。
私の問題のこの量の言葉をとても残念に思います、それはただの頭脳です。いくつかの解決策がありますが、経験豊富な開発者からのアドバイスと言葉が本当に必要です。