2009-03-18 5 views
6

私は、その時に送信されるはずの電子メールについて毎分データベースをチェックするアプリケーションを持っています。私はこれを毎分cronジョブによって実行されるレーキタスクにすることを考えていました。これにはもっと良い解決策がありますか?1分ごとに実行されるメーラー用のベストレールソリューション

レーキはレール環境全体を1分ごとにロードする必要があり、これは高価になるため、これは理想的ではありません。

思考?

ありがとうございました。

答えて

11
  1. backgroundrbを使用できます。しかしこれは、メインのRailsアプリからメモリを奪い、backgroundrbに1つのRubyインスタンスを生成します。
  2. メインアプリケーションでSystemController(または同等のもの)を定義して、アプリケーションで実行するさまざまな家計タスクに対応するさまざまなアクションを定義することもできます。 wgetまたはcurlを使用してcrontabからプロデュースすることができます。これは、メインアプリケーションとリソースを共有するという利点があります。このようなコントローラをおそらく外界に暴露するDOSやその他の攻撃に対して、どのような影響を受けるのかによって、コントローラのURLへのアクセスは、ループバック以外のアドレスからブロックすることができます(代わりに、コントローラ自体から、リバースプロキシで。)
0

理想的に私は、ヴラドは光栄ローカル要求だけで、(#2)提案何、と私はまた、特定のクエリ文字列は、上のタック必要とするほど偏執的ですURLに。

私はこのようにいくつかの定期的なアクションを設定しています。

1

一つは本当に簡単な方法は、あなたは常にRailsの環境を再生成されていないこと

while true do 
    check_and_send_messages() 
    sleep 60 
end 

..which ..行うスクリプトを持っているだろう。

明らかにそれは様々な欠陥を持っていますが、また、いくつかの利点があり、(1-レーキは、毎分、それはrakeタスク1分以上かかりますあなたと、例えば、レーキは、一度に複数回実行されます)

また、(彼らはまさにこの作業を記述している)RailscastsはRake in BackgroundStarling and Worklingをエピソード、そしてCustom Daemonはあなたにいくつかのアイデアを与えるかもしれない

1

それはちょうどこのために構築された何か実際にありますが判明:ar_mailerが。 ar_mailerは、電子メールをDBにキューイングし、ar_mailerコマンドを使用して定期的に送信します。毎分ar_mailerを呼び出すことができます。

ar_mailerの素晴らしい点は、基本的に電子メールを送信する方法に関しては、ほとんど変更を必要としないことです。 ActiveMailerではなくar_mailerから継承する必要があります。この方法を使うと、バックグラウンドでレイクタスクを実行したり、プロセスをフォークしたりすることを心配する必要がなくなり、実際にメールが送信されたときに削除されるキューに入れられたメッセージを持つ実際のメールサーバーが得られます。この機能は、多数の電子メールを送信するシステムを持っている場合に重要です。私はソーシャルネットワークを構築するためにar_mailerを使用しました。そのため、私はその堅牢性を証明することができます。

Here's a good article that talks about ar_mailer in depth。エリックはこの問題を解決するために時間を要したソリューションを構築しているので、ここでは自分のソリューションを導入することを強くお勧めします。

関連する問題