简短版本:我需要从 Rails 控制器(使用 Rails 3)启动子进程(Ruby 脚本),并将stdout
子进程中的消息渲染到网页,并从 Rails 视图将信息传递到子进程。
设置:我有一个 Ruby 脚本,它与名为Ivy的软件消息总线系统通信,使用 Ruby 1.9.3 将控制消息发送到我网络上其他地方运行的某些硬件并从其接收消息。我不能在这里使用替代的消息传递系统,它必须是 Ivy。该脚本当前将消息写入stdout
.
问题 1:我想将此脚本作为子进程(或线程,我愿意接受建议)从 Rails 应用程序的控制器启动。我希望能够从这个脚本接收消息,以便它们可以显示在网页上。无需将这些消息持久地存储在数据库中,因此我正在考虑使用 Rails 缓存来临时存储和访问消息,并可能使用 AJAX 每隔一段时间轮询缓存以获取新消息。这可能吗?
问题 2:同一个 Rails 应用程序需要能够将控制消息从网页(例如,通过用户与按钮、下拉菜单或其他一些 UI 元素交互)发送到 Ivy 子进程,以便这些控制消息可以传播到硬件。
我已经研究过 Sidekiq、Delayed Job等潜在的解决方案,但我无法通过浏览文档找到确凿的证据表明这些潜在的解决方案可以同时解决问题 1 和问题 2。所以,我的问题如下:
- 像 Sidekiq 或 DelayedJob 这样的现成解决方案可以处理这个任务吗?
- Rails 中是否已经内置了某种方法可以实现这一点?
- 这个问题接近于意见,但无论如何我都会问。我有其他理由追求 Rails,但如果这项任务非常困难,他们可能会被击败。使用 Rails 做这样的事情会很痛苦,我应该研究替代解决方案吗?