问题描述
请问,在Rails应用中 如何 监听Startup 和Shutdown?就像在 java web应用中使用servlet 的 listener一样,我需要在 Rails 中 监听 应用的启动和关闭,请问应该怎么实现呢?我知道,把一个 .rb文件 放在 APPconfiginitializers 目录下,Rails启动时会自动运行它,权且当这是 监听应用Startup的方法吧,那么 Shutdown 呢?在开发模式下,我总是 使用 Ctrl + C 结束 Rails应用, 我不知道 有什么好的方法能让我抓到 应用被关闭的事件。请熟悉 Rails 的朋友 给点建议。难道是我的想法错了么? Rails 和 Java在处理此需求时的方法 有什么不同吗?我相信在Rails中应用中也会有像servlet listener那样的需求场景,Rails是如何应对的呢?我一定要等到这个问题 有解决方法。 问题补充:cxh116 写道
解决方案
1.启动,在/config/initializers 下创建一个文件,然后监听rails的启动。2.同样在该目录下 重写 Ruby Kernel 的一个方法(at_exit) 去监听 rails 的关闭。A.文件名:awe_servlet_context_listener.rbB.文件内容如下:puts 'start......~~~~~~~~~~~~~~~~~~~~~~~~'at_exit do puts 'bye...~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'endC.存放目录 /config/initializers
解决方案二:
后台任务你可以看一下现在的gem满足你的需求不 https://www.ruby-toolbox.com/categories/Background_JobsResque和Delayed_job都是挺不错的
解决方案三:
@java-admin 的方法应该可以实现 对应用服务器的启动流程不是很了解,不知道在FASTCGI这样的多进程的时候,会出现一个什么样的情况. 每个进程就是一个RUBY VM,到时会进程退出的时候会调用at_exit吗?我觉得不应该用SERVLET的场景来思考RACK在RACK中,并没有定义像SERVLET里中application对象,所以不存在服务器的既出要保存application里的数据. 你可以把它存到外面数据里面,比如MEMCACHE,或数据库
解决方案四:
监听器在JAVA中是在servlet中定义的,ruby中类似于servelt的rack并没有定义类似监听器的技术 不晓得其它的特定应用服务器有实现没有 像ruby这样活的元编程语言,你可以轻松的进行AOP编程的
解决方案五:
好像RUBY的应用服务器没有容器这个概念 它更加像CGI 来个请求 运行一个进程去执行 执行完后 进程销毁掉 所以 ruby的应用在线上运行时,也可以随时重启服务器