我有一个已作为独立功能实现的 ruby 脚本。 现在我想在我的 Rails 环境中执行这个脚本,但将其作为后台作业执行会增加难度,因为它需要大量的时间处理。
添加delayed_job gem后,我尝试调用以下句子:
delay.system("ruby my_script.rb")
这是我得到的错误:
Completed 500 Internal Server Error in 95ms
TypeError (can't dump anonymous module: #<Module:0x007f8a9ce14dc0>):
app/controllers/components_controller.rb:49:in `create'
最佳答案
从 Controller 调用 self.delay
方法 won't work ,因为 DJ 会尝试将您的 Controller 序列化到作业中。您最好创建一个类来处理您的任务,然后将其方法标记为异步:
class AsyncTask
def run
system('ruby my_script.rb')
end
handle_asynchronously :run
end
在你的 Controller 中:
def create
...
AsyncTask.new.run
...
end
请参阅 readme 的“排队作业”部分中的第二个示例.
关于ruby-on-rails - Rails 将脚本作为后台作业执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13358805/