メソッドをループおよびバックグラウンドで実行する必要があるプロジェクトがあります。
基本的に、Webサービスを呼び出す→データを読み取る→データベースに保存する→何度もループするメソッドがあります。
「loops」という宝石を見つけましたが、おそらく 2 つの問題があります。
Rails 3 と Ruby 1.9.3 をサポートしているかどうかはわかりません。
サポートされていないようです (最後のコミットは半年前です)。
メソッドをループおよびバックグラウンドで実行する必要があるプロジェクトがあります。
基本的に、Webサービスを呼び出す→データを読み取る→データベースに保存する→何度もループするメソッドがあります。
「loops」という宝石を見つけましたが、おそらく 2 つの問題があります。
Rails 3 と Ruby 1.9.3 をサポートしているかどうかはわかりません。
サポートされていないようです (最後のコミットは半年前です)。
Ruby にはループ構造があります。
loop { puts "hi" }
次のような単純なループ プログラムを作成します。
loop do
data = read_data_from_web_service
store_data_to_db(data)
end
でスクリプトを設定しますupstart
。foreman
これには gem を使用できます。foreman
それ以外はご都合に合わせてそのままご利用いただけますupstart
。リンクをチェック
monit
または、スクリプトの監視などのツールを使用できます。
私の理解が正しければ、あなたの目標はコードをバックグラウンドで無限にループさせることです。
必要な部品は次のとおりです。
loop do <code> end
現在のスレッドで < code> ノンストップでループします
mythread = Thread.new(<args>) do |<args>| <code> end
mythread.run
< code> を別のスレッド (バックグラウンド、別名非同期) で実行し、あたかも関数であるかのように < args> をそれに渡します。
やりたいことは、スレッド内で < code> をループすることです。そう... (あなたが合格したいと仮定すると
myloop = lambda do loop do <code> end end
mythread = Thread.new(myloop) do |loop| loop.call end
mythread.run
rake タスクからメソッドを呼び出して、コマンド ラインから rake タスクを開始するには、nohup
.
例:
のlib/tasks/fetch_data.rake
task :fetch_and_save => :environment do
loop do
Model.method() # Do whatever you need to do here
end
end
その後、で開始できます$ nohup rake fetch_and_save
。