Необходимо запустить TCP-сервер помимо приложения Rails.

У меня есть приложение Rails 2.0.2, работающее с базой данных postgresql. Машина будет получать данные через порт TCP. Я уже закодировал работающий многопоточный tcp-сервер ruby ​​для получения запросов, но мне нужно, чтобы этот код работал вместе с моим приложением Rails.

Итак, я думаю, мне нужно знать, как создать новый процесс внутри Rails или как создать рабочий поток, который будет запускать цикл моего многопоточного сервера tcp. Мой tcp-сервер ruby ​​мог бы иметь доступ к ActiveRecord, но это не обязательно (я всегда могу создать http-запрос, отправив полученные данные на исходный сервер Rails)


person Louis-Mathieu Houle    schedule 24.09.2008    source источник


Ответы (3)


Зачем все усложнять? Просто запустите приложения — ваш TCP-сервер и приложение Rails — параллельно.

Либо перетащите уровень модели (и ActiveRecord) на свой TCP-сервер (svn::externals или Piston могут подойти для этого) и позвольте связи между двумя приложениями происходить через базу данных, либо пусть приложение Rails будет «главным» и общаться с ним через HTTP, как вы предлагаете.

Чтобы превратить приложение Ruby в службу Windows, см. гем win32-service, доступный в проекте win32utils: http://rubyforge.org/projects/win32utils/

person Ian Terrell    schedule 25.09.2008

Мне нужно, чтобы TCP-сервер работал как служба на сервере Windows 2003. Я использую mongrel_service для загрузки Rails как службы, и я не знаю, как сделать то же самое для чистого кода ruby. Если бы я мог запустить свой tcp-сервер при загрузке компьютера, я рассмотрю ваше решение (которое, тем не менее, кажется довольно хорошим).

person Louis-Mathieu Houle    schedule 25.09.2008
comment
Как правило, лучше отредактировать исходный вопрос, чем публиковать дополнительный ответ. - person Nate; 26.09.2008

Не делайте ваше приложение Rails ответственным за состояние приложения TCP-сервера. Это действительно не очень хорошо подходит для этого - и, вероятно, нет причин, по которым они должны запускаться в абсолютной синхронизации друг с другом. Используйте monit или что-то еще для мониторинга обоих серверных процессов.

Невозможно сказать наверняка, не зная больше об архитектуре вашего приложения, но я бы предложил использовать ActiveRecord и базу данных для связи между вашими серверами вместо HTTP. Таким образом, даже если ваше приложение Rails по какой-то причине не работает, ваш другой сервер все еще может обрабатывать запросы. Это также, вероятно, будет немного быстрее.

person Nate    schedule 25.09.2008