2016-05-09 8 views
2

のために働いていないとき、私は私が宝石は2秒ごと

every 2.seconds do 
    rake "my:rake:task" 
end 

ような何かをしようとすると良い働いている私のバックエンドcronsジョブのたび宝石を実装している私は、このエラーを取得する

`parse_time': Time must be in minutes or higher (ArgumentError) 

I数秒ごとにこのタスクを実行したいのですが、どうすればこのことができますか?

+0

あなたのrakeタスクは何をしますか? – Stefan

+0

第三者のAPIに2つのリクエストを送信 –

答えて

4

これはwheneverの宝石ではできません。

whenever gemは、単にcron jobを作成します。これらは、分()の最小粒度でのみ構成できます。

あなたのタスクを実行する無限ループのシェルスクリプトを作成してから、2秒間スリープします。しかし、私はそれに反対する - これは頻繁に間違って感じる何かを実行します。おそらくもっとクリーンなアプローチがあります。コードをafter_saveフックとして実行していますか?

1

thisはcronのはわずか1分の最小値を可能

理由ですので、あなたは、エラーが発生しました。あなたができることは、タスクを実行する無限ループを持つシェルスクリプトを作成し、2秒間スリープします。こうすることで、タスク自体の所要時間に応じて、2秒ごとにタスクを多かれ少なかれ実行できます。

あなたはおそらくループによって同じよう

かかわらやっすべきではない何かをやっているようですが、実際に聞こえるん

while true ; do cd /home/myrailsapp && rake my:rake:task & ; sleep 2; done 

それともconrtabこの

のようになりますし、 in /home/myrailsapp/rakescript.sh

cd /home/myrailsapp && rake my:rake:task 

in corntab

* * * * * /home/myrailsapp/rakescript.sh 
* * * * * sleep 2; /home/myrailsapp/rakescript.sh 
* * * * * sleep 4; /home/myrailsapp/rakescript.sh 
* * * * * sleep 6; /home/myrailsapp/rakescript.sh 
+1

これは他の回答へのコメントになるはずです。 – sawa

0

レールランナーを持つループが正常に動作します:

loop { 
    Ball.update_all_positions 
    sleep 2 
}