我正在使用 JRuby 1.5.6 on Rails 为自己构建一个应用程序,该应用程序将定期退出并检索我订阅的任何 RSS 播客。
我选择 JRuby 主要是因为我熟悉 Java,希望使用 Rails 框架,最重要的是,当 Ruby 无法满足我的要求时,我能够在 Java 中执行“繁重的”任务。到目前为止(我仍处于开发的早期阶段),这种混合方法一直运行良好。
我现在需要将定期和长时间运行的任务调度到后台进程。我的要求是拥有一个数据库支持的调度系统,理想情况下,该系统有据可查,目前维护良好且干净。
我现在的问题是,经过多日研究合适的自 gem 打包解决方案后,由于我使用了 JRuby,我似乎没有多少选择。
我尝试过的一些宝石...
鲁弗斯调度程序
在我对它的界面和文档感到满意之前使用过它,但是缺乏数据库持久性,因此对我的要求来说是一个交易破坏者。
延迟作业
我理想的解决方案是delayed_job。良好的文档,仍然得到维护和数据库支持,然而,由于 ObjectSpace 被关闭(我们可以通过重新启用来解决这个问题),但更致命的是,对守护进程 gem 的依赖会引发“fork is unsafe and disabled”由于 JRuby 实现中的限制,默认情况下在 JRuby 上出现错误。
github上有一个不依赖于守护进程的fork,但是我不高兴切换到主开发分支的fork,我仍然遇到ObjectSpace问题,我不确定它的性能影响。
石英-jruby
虽然之前已经有各种基于石英的宝石,但最近的这个产品是提供类似红宝石的光滑界面的另一种尝试。然而,文档很少,我不确定这是否可以由数据库支持,我的直觉是它不是。
问题
虽然我在这里只强调了 3 个选项,但我知道还有其他可用的。但是,我无法找到一个解决方案来勾选所有 3 个需求框(文档、维护、数据库支持)。
所以问题是...
有没有其他人遇到过这种情况并提出解决方案?
有没有人设法让 delay_job 以任何形式工作?
有没有我忽略的更好的解决方案可以满足我的需求?