bash コマンドを実行するとすぐにすべての処理を停止する resque ワーカーがあります。これが私の労働者です:
class ProductJsonSaver
@queue = :products
def self.perform(id)
product = Product.find(id)
json = `phantomjs #{Rails.root}/lib/product_scrape.js`
product_json = JSON.parse(json)
p "Procesing is done"
p "Product JSON: #{product_json}"
product.update_attributes({:processed => true})
end
end
私が走れば
Resque.enqueue(ProductJsonSaver, 1)
ワーカーが bash コマンドを実行しているのを確認できます。bash コマンドの出力は表示されますが、その後の print ステートメントは表示されず、製品の処理された属性は更新されません。resque-web でも、プロセスが失敗したとは表示されません。実際、ProductJsonSaver.perform(1)
Rails コンソールから実行するだけで機能します。
これは Resque のバグですか?
基本事項: Rails 3.2.11、OSX、ruby-1.9.3、resque 1.23.0
問題をより明確にするために編集されたコード。