Как реализовать автоматический запуск и выход из демонов в рельсах

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

Что я хочу сделать, так это написать приложение Rails, которое ведет себя как «дропбокс». С одной стороны, это должен быть веб-интерфейс, через который я могу загружать и скачивать файлы на свой веб-сервер. Это взаимодействует с моей базой данных и всем этим. С другой стороны, у меня есть SSH-доступ к этому серверу, и я могу помещать туда файлы вручную. Теперь я хочу, чтобы действия этой файловой системы запускали мое приложение Rails, чтобы делать то, что оно делало бы, если бы я создал файл через веб-интерфейс.

Значит я как-то пишу демона, да? Существует множество решений, например
daemons.rubyforge.org/
github.com/mirasrael/daemons-rails
github.com/costan/daemonz
github.com/kennethkalmer/daemon- Комплект

Еще одна функция, которую я хотел бы иметь, заключается в том, что мое приложение Rails автоматически запускает и останавливает мой демон при запуске или выходе из моего приложения Rails, соответственно. Так что "daemonz" кажется лучшим решением. Но погуглив дальше, я нашел
github.com/FooBarWidget/daemon_controller/
, который кажется намного более «высокотехнологичным» и уже используется при развертывании с пассажиром. Но я не понимаю, убьет ли это моих демонов, когда я уйду из Rails. Я полагаю, что это не так, и поэтому мне интересно, как реализовать это в моем приложении.

Способ реализовать «вещь», реагирующую на изменения файловой системы, кажется мне простым. Я бы использовал
github.com/guard/listen/
(альтернативой может быть: github.com/ttilley/fssm )
Но чего я не понимаю, так как это в первый раз, когда я действительно столкнулся с этим протоколом, если он порождает сервер, с которым я могу общаться, или с каким объектом мне приходится иметь дело.

Последнее, что я хотел бы реализовать, — это своего рода рабочая очередь, чтобы прослушивание изменений файловой системы было отделено от действий моего приложения rails. Но существует так много решений, что я просто не могу выбрать одно:
github.com/tobi/delayed_job/
github.com/defunkt/resque
http://backgroundrb.rubyforge.org/

И что такое
http://godrb.com/
? Как это могло мне помочь?

Кто-нибудь намекает, как это решить? Большое спасибо!

Ян

P.S. Я хотел бы опубликовать ссылки на все проекты github, но, к сожалению, у меня недостаточно «репутации».


person jan    schedule 19.05.2012    source источник


Ответы (3)


Я бы определенно задумался о создании процесса (демона), который отслеживает соответствующий каталог. Тогда ваше приложение Rails может просто помещать в него файлы, ничего не зная о серверной части, и оно также будет работать с SSH.

Ваш демон может загружать среду Rails и взаимодействовать с вашей базой данных. Я бы оставил все общение между ними на этом уровне.

Что касается запуска/остановки с помощью вашего приложения rails... вы уверены? Я использую бога (рубиновый драгоценный камень) для запуска/мониторинга процессов. Это также «демонизирует» ваше приложение Ruby. Если вы хотите, вы можете сказать богу, чтобы он остановил ваш процесс монитора каталогов, а затем вышел, когда Rails остановится. И вы можете запустить god из инициализатора Rails.

Однако, если вы обнаружите, что используете SSH или другие средства для помещения файлов в этот каталог, когда рельсы не запущены, вы можете подумать о том, чтобы поместить скрипт в /etc/init.d для автоматического запуска god при загрузке сервера.

ХТН

person David    schedule 19.05.2012
comment
Спасибо за помощь. Потребовалось время, чтобы успеть посмотреть на ваши намеки. Бог — это, скорее всего, решение, которое я ищу, хотя оно и не идеально. Я искал более «родное» решение, которое интегрируется в рельсы, но оно работает и делает то, что должно. - person jan; 23.05.2012

Я думаю, вам нужно что-то вроде Guard для отслеживания изменений в файловой системе и выполнения действий при возникновении изменений.

Что касается бога, вы обязательно должны в него заглянуть. Это значительно упростит запуск/остановку процессов, от которых вы зависите. Мы какое-то время использовали Bluepill, но там так много багов, что мы его забросили и перешли к Богу, с которым, ИМХО, работать намного приятнее, по большей части.

person d11wtq    schedule 19.05.2012
comment
Ага, Гвардия, особ. github.com/guard/listen/ — это то, что я буду использовать для своего решения. - person jan; 23.05.2012

Вы пытались создать файл сценария, например:

startDaemon.rb

И затем разместить его:

config/initializers/ 

?

person thejartender    schedule 19.05.2012