所以,我正在使用 Rails 构建一个小型应用程序。我需要使用 XMPP proto 通过一些命令通知用户来更改用户状态。
以前的版本是一个使用纯 Python(相当丑陋的应用程序)的应用程序,它带有纯 SQL 请求到 DB。有一个表“jabber_queue”,所以在单独的脚本中,机器人每秒检查任何行,处理它(发送消息),删除。这既简单又愚蠢,但没关系。
现在我明白了,我需要将此机器人功能集成到 Rails 中(至少要与 RSpec 一起使用)。
这是我如何做到的几个版本:
使用分离的异步队列解决方案。例如,雷斯克。使用单独的 Ruby 脚本并将事件推送到 Resque,在应用程序中弹出事件(不依赖于 DB,因此很容易适应 RSpec 测试和测试 DB)。但这使我的应用程序有点臃肿——我需要使用第二个具有大量内存和 CPU 额外要求的数据库——这将是我的问题的开销。另外,我不想为这个应用程序支持额外的“东西”,我知道,它可以更容易地完成。
使用延迟作业(使用当前 AR DB 的队列解决方案)。但我不知道如何在单独的脚本中获取 Rails 应用程序的当前 AR DB。无论如何,这是一种肮脏和丑陋的方式。
在 Rails 应用程序内启动 XMPP bot ,作为后台工作人员。所以工人将可以访问“当前”AR(在测试的情况下,测试数据库)。但我根本不知道该怎么做。我找到了一个Navvy,但我需要在 Rails 的某个地方开始一个字符串,比如“ Navvy::Job.enqueue(Cow, :speak) ”,我不知道哪里是最好的开始它与 RSpec 测试和“rails 服务器”一起使用。此外,还有一个 BackgrounDRb,但这个项目类似于 Navvy 并且也处于非活动状态。在stackoverflow上使用搜索,我发现了与我类似的问题,但解决方案将我引导到background_job,它可以在后台进行任何操作,但我仍然不知道如何在单独的脚本中获取当前的 AR DB 访问权限。
我很抱歉我的问题中有这么多的话,这只是一个脑力激荡。我看到了一些解决方案,但我真的需要更有经验的开发人员的建议和一些话。