2013-03-31 2 views
0

Мое приложение в 2 раза. Сначала он запускает поток, который считывает вывод Arduino для получения данных и хранения их в моей модели. Он делает это навсегда, так как Ардуино навсегда проверяет данные. Во-вторых, основное веб-приложение анализирует данные и рисует причудливые графики.Код для запуска один раз и только один раз при каждом перезапуске сервера rails

Когда я запускаю сервер rails, я бы хотел, чтобы поток чтения запускался один раз и только один раз.

Моя текущая реализация связана с потоком в основном контроллере моего приложения (так как мне нужна модель для хранения данных). Каждый раз, когда я обновляю страницу, создается новый поток. Это не то, что я хочу, поскольку параллельный доступ к Arduino создает ложные показания.

Я думаю, что это довольно классическая проблема, но я не вижу, каким образом можно получить это поведение с Rails. Я смотрю и гуляю в течение недели, но я все еще застрял.

Заранее спасибо. Pierre

ответ

1

Согласны с @rovermicrover, вам следует рассмотреть возможность разделения задачи взаимодействия с ардуином из веб-приложения.

С этой целью я рекомендую вам создать задачу рейка для этой части. Тогда вы можете рассмотреть возможность запуска/остановки/перезапуска этой задачи рейка через foreman. Это хороший чистый способ пойти, и вы также можете легко сделать интеграцию с capistrano.

+0

Спасибо за вашу помощь, глубоко оцененный. Думаю, задача будет в состоянии использовать такую ​​же Активную запись, как и приложение? это оно ? Еще раз спасибо. –

+0

Yup, если задание задает ': environment' как зависимость, ваше приложение будет загружено, и вы сможете делать обычные вещи, например, использовать свои AR-модели. PS: + 1 - это способ сказать спасибо здесь. ;) –

+0

Жаль, что я не знал. Я поставил вопрос в зеленый цвет, делает ли это +1? –

1

Неверный инструмент для работы. Вид. Вы не захотите, чтобы приложение rails отслеживало выход Arduino, рельсы на самом деле не подходят для чего-то подобного. Ваш лучший, имеющий отдельное приложение, прочитает вывод Arduino, а затем сохранит информацию в базе данных.

Arduino выход ---> Применение Синтаксический выход ---> DB ---> Rails App

Таким образом, ваш веб-приложение может сосредоточиться на сети, а не разрываться между работой.

Интересный способ сделать это состоял бы в том, чтобы приложение синтаксического анализа было рубиновым приложением и использовало Active Record вне рельсов в этом экземпляре. Хотя я никогда этого не делал, люди использовали Active Record в настройках simliar в чистых приложениях Ruby. Вот старый пример.

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

Этот способ также, когда вы перераспределить ваши рельсы приложение, данные будут по-прежнему иметь возможность собирать. Он также создает брандмауэр, поэтому, если ваше приложение rails будет взрываться или исчезнет, ​​сбор данных не будет затронут.

+0

Большое спасибо за ваш ответ. Я думал об этом, но я думал, что у меня работает сервер Rail для использования ActiveRecords. Я рассмотрю ваш пример. Еще раз спасибо. –

Смежные вопросы