ruby-on-rails - Rails 将脚本作为后台作业执行

标签 ruby-on-rails background delay

我有一个已作为独立功能实现的 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/

相关文章:

ruby-on-rails - 从 Meta_search 升级到 Ransack 时出现 "No valid predicate"错误?

ios - BLE后台重连

android - 在 list 中定义 sdk-version 后色带解决方案被杀死

Haskell 箭头延迟函数

ruby-on-rails - Bootstrap 在 Rails 应用程序中不起作用

ruby-on-rails - 在 Rails 应用程序中请求/响应 Soap API

android ftp上传已停止错误

ios - iOS游戏开始时的输入延迟

javascript - Jquery:延迟和淡入多个div onload?

ruby-on-rails - 在 url 中,如何在 ruby​​ on rails 中显示标题名称而不是 id?