jruby on rails 调度选项

标签 jruby scheduling jrubyonrails

我在 Rails 上使用 JRuby 1.5.6 为自己构建一个应用程序,该应用程序将定期消失并检索我订阅的任何 RSS 播客。

我选择 JRuby 主要是因为我熟悉 Java,希望利用 Rails 框架,最重要的是,当 Ruby 不能满足我的要求时,我能够用 Java 执行“繁重”的任务。到目前为止(我仍处于开发的早期阶段),这种混合方法一直运行得非常好。

我现在需要将定期和长时间运行的任务调度到后台进程。我的要求是拥有一个数据库支持的调度系统,理想情况下,该系统具有良好的文档记录、当前维护和清洁。

我现在的问题是,经过多天研究合适的自 gem 打包解决方案后,由于我使用 JRuby,我似乎没有什么选择。

我尝试过的一些 gem ......

rufus 调度程序

在我对它的界面和文档感到满意之前使用过它,但是缺乏数据库持久性,因此对我的要求来说是一个交易破坏者。

延迟作业

我理想的解决方案是delay_job。良好的文档,仍在维护和数据库支持,但是,由于 ObjectSpace 被关闭(但是我们可以通过重新启用来解决这个问题)在 JRuby 下中断,但更致命的是对守护进程 gem 的依赖会抛出“fork is unsafe and disabled由于 JRuby 实现中的限制,默认为 JRuby”错误。

github 上有一个不依赖守护进程的分支,但是我不高兴从主开发分支切换到分支,而且我仍然遇到 ObjectSpace 问题,我不确定它的性能影响。

quartz -jruby

虽然之前有各种 quartz 基 gem ,this very recent offering是提供光滑的 ruby​​-like 界面的另一种尝试。然而,文档很少,我不确定这是否可以由数据库支持,我的直觉是它不是。

问题

虽然我在这里只强调了 3 个选项,但我知道还有其他选项可用。然而,我无法找到一个解决方案来勾选所有 3 个需求框(文档、维护、数据库支持)。

所以问题是...

有没有其他人遇到这种情况并提出解决方案?

有没有人设法让 delay_job 以任何形式工作?

有没有更好的解决方案被我忽略并满足我的需求?

最佳答案

我们在生产环境中使用了 JRuby 下的 delay_job (collectiveidea/v1.8.4) 一年多了。
我们没有启用 ObjectSpace,也没有使用守护进程 gem。

创建了一个简单的 rake 任务

  namespace :product do
    desc "Start Delayed Job Worker"
    task :dw => :environment do
      Delayed::Worker.new.start
    end
  end

并以操作系统相关的方式对其进行守护。在Linux上,
nohup jruby -S rake product:dw > $log_dir/delayed_job_console.log  2>&1 &

关于jruby on rails 调度选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4389603/

相关文章:

scheduled-tasks - 带到达时间的循环调度

tomcat - 如何在 Tomcat 中的 Rails 初始化期间创建全局命名空间的 CONSTANT?

jruby - 在 tomcat 内的 jruby/rack 中使用 jruby 时,如何/在哪里设置 jruby 的 --fast 模式?

tomcat - 在 Tomcat 中使用 JRuby on Rails 追踪 PermGen 问题

ruby-on-rails - 在 Bundler 中指定 JRuby 版本

java - 将 Ruby block 传递给 Java 方法

c - 任务调度——控制函数的执行

python - 使用 random 函数随机化计划任务

ruby - 我需要手动构建 Ruby DSL 的哪些部分?

java - 对非 Rails 应用程序使用 activerecord 迁移,步骤是什么?