如何在rails中实现自动启动和退出守护进程

时间:2012-05-19 00:05:36

标签: ruby-on-rails ruby asynchronous daemon worker

Rails社区为我的问题创建了一些可能的解决方案,我有点不知所措。所以也许任何人都可以帮我弄清楚如何最好地解决它。

我想要做的是编写一个行为类似“dropbox”的Rails应用程序。一方面,它应该是一个Web界面,我可以上传和下载文件到我的Web服务器。这与我的数据库和所有东西相互作用。另一方面,我有SSH访问该服务器,可以手动放置文件。现在我想要这个文件系统操作来触发我的Rails应用程序,以便在我通过Web界面创建文件时执行的操作。

所以我以某种方式写了一个守护进程,对吧?有很多解决方案,比如
daemons.rubyforge.org/
github.com/mirasrael/daemons-rails
github.com/costan/daemonz
github.com/kennethkalmer/daemon-kit

我希望拥有的另一个功能是,我的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项目的链接,但不幸的是我没有足够的“声誉”

3 个答案:

答案 0 :(得分:0)

我肯定会考虑创建一个监视相关目录的进程(守护进程)。然后你的Rails应用程序可以直接将文件放入其中,而无需了解后端的任何信息,它也适用于SSH。

您的守护程序可以加载Rails环境&与您的数据库通信。我会在那个级别上留下他们之间的所有沟通。

至于使用rails应用程序启动/停止...你确定吗?我使用god(红宝石宝石)来启动/监控进程。它也将为您“daemonize”您的Ruby应用程序。如果你愿意,你实际上可以告诉上帝停止目录监控过程&然后当Rails停止时退出。你可以从Rails初始化器中解雇上帝。

但是,如果您发现自己使用SSH或其他方法在rails未运行时将文件放入该目录,您可能会考虑将一个脚本放入/etc/init.d以在服务器启动时自动启动上帝起来。

HTH

答案 1 :(得分:0)

我认为您需要类似Guard之类的内容来监控文件系统上的更改并在发生更改时执行操作。

至于上帝,你一定要深入研究它。它将使您依赖的启动/停止过程变得相当容易。我们使用Bluepill已经有一段时间了,但是有很多错误,我们抛弃它并转移到上帝,恕我直言,对于大多数人而言,恕我直言的工作更愉快。

答案 2 :(得分:0)

您是否尝试过创建脚本文件,例如:

startDaemon.rb

然后放置它:

config/initializers/