我有一个使用Resque进行后台进程的应用程序。所以我有
-/app/workers/dataCollector.rb
并在控制器中:
def new
@my_model = MyModel.new(params[:])
Resque.enqueue(DataCollector, @my_model.id)
end
我想添加另一个工作者,在某些时候会从dataCollector获取一些信息并进行处理。
所以我试过了:
-app/workers/dataCollector.rb
/dataProcessor.rb
并且在我的MyModel类中:
def my_function
...
data.each do |d|
Resque.enqueue(DataProcessor, data)
end
end
我的新工人看起来像:
class DataProcessor
@queue = :processing_queue
def self.perform(data)
new_var = processingFunction(data)
newModel.column = new_var
end
end
产生的错误是“堆栈级太深”
我在本地运行了一次程序......用
bundle exec env rake resque:work QUEUE='*'
redis-server /usr/local/etc/redis.conf
并且永远不会在resque web界面中看到processing_queue。
答案 0 :(得分:0)
根本问题是一个错字。而不是:
data.each do |d|
Resque.enqueue(DataProcessor, data)
end
我认为你的意思是:
data.each do |d|
Resque.enqueue(DataProcessor, d)
end
然后你看到消息的原因"堆栈级别太深"那是Resque jobs can only accept arguments that can be JSON encoded,大概是data
不能。{/ p>