0

我的申请是2折。首先,它运行一个线程来读取 Arduino 输出以获取数据并将它们存储在我的模型中。它永远这样做,因为 Arduino 永远在感知数据。其次,主 Web 应用程序分析数据并绘制精美的图表。

当我启动 rails 服务器时,我希望读取线程只运行一次。

我当前的实现是在我的应用程序的主控制器中使用一个线程(因为我需要模型来存储数据)。每次我刷新页面时,都会创建一个新线程。这不是我想要的,因为对 Arduino 的并发访问会产生错误的读数。

我想这是一个非常经典的问题,但我看不出用 Rails 获得这种行为的方法是什么。我一直在寻找和谷歌搜索一个星期,但我仍然卡住了。

提前致谢。皮埃尔

4

2 回答 2

1

错误的工作工具。有点儿。您不希望 rails 应用程序监控 Arduino 输出,rails 并不适合这样的事情。最好有一个单独的专用应用程序读取 Arduino 输出,然后将信息保存到数据库中。

Arduino 输出 ---> 应用程序解析输出 ---> DB ---> Rails App

这样,您的 Web 应用程序可以专注于 Web,而不会在工作之间被撕裂。

一个有趣的方法是让解析应用程序成为一个 ruby​​ 应用程序,并在本例中使用 Rails 之外的 Active Record。虽然我从未这样做过,但人们已经在纯 Ruby 应用程序中的类似设置中使用过 Active Record。这是一个老例子。

http://blog.aizatto.com/2007/05/21/activerecord-without-rails/

这样,当您重新部署 Rails 应用程序时,仍然可以收集数据。它还创建了一个防火墙,因此如果您的 Rails 应用程序爆炸或出现故障,数据收集将不受影响。

于 2013-03-31T20:27:41.537 回答
1

同意@rovermicrover,您应该考虑将与 arduino 交互的任务与 Web 应用程序分开。

为此,我建议您为该作品创建一个 rake 任务。然后,您可以考虑通过foreman管理该 rake 任务的启动/停止/重新启动。这是一个很好的干净方式,你也可以很容易地进行 capistrano 集成。

于 2013-03-31T20:40:52.740 回答