Похоже, что вашему приложению требуется то, что обычно называется background или worker process. Это довольно распространенное требование для любого умеренно сложного веб-приложения.
Я предполагаю, что мне нужно создать отдельный процесс, который будет работать в фоновом режиме, чтобы отвечать на сообщения правильно?
Да, вы правы. Хотя вполне возможно использовать потоки для обработки фоновых задач (в вашем случае чтение и обработка сообщений из RabbitMQ), стандартным и рекомендуемым маршрутом для приложения Rails является запуск отдельного фонового процесса.
Если это так, возможно ли повторно использовать модели / библиотеки, которые уже есть в приложении rails?
Абсолютно. Самый простой способ добиться этого - использовать встроенную в Rails команду .
Rails *.
Другой вариант - создать скрипт ruby, который загружает ваше Rails-приложение. Например, вы можете создать файл my_script.rb
в корне вашего проекта, который может выглядеть примерно так:
# Load my application:
require File.join(File.dirname(__FILE__), 'config/environment.rb')
# Now you can access your Rails environment as normal:
MyModel.all.each { |x| x.do_something }
Если ваши потребности становятся более сложными, или вы обнаружите, что вам нужно запустить более одного фонового процесса, чтобы не отставать от объема данных, которые вам нужно обработать, вы можете обратиться к одному из многих доступных библиотеки и фреймворки , которые могут помочь с этим.
После того как вы создали фоновый процесс, вам потребуется способ его непрерывного запуска при развертывании на рабочем сервере. Хотя можно использовать библиотеки, такие как daemons , как рекомендует ctcherry, я бы порекомендовал использовать специальный инструмент, например upstart (при развертывании в Ubuntu) или runit . Хорошее резюме наиболее популярных опций: доступно здесь .