netweiandwinnie
2011-11-15 19:35
浏览 242
已采纳

请问,在Rails应用中 如何 监听Startup 和Shutdown?

请问,在Rails应用中 如何 监听Startup 和Shutdown?

就像在 java web应用中使用servlet 的 listener一样,我需要在 Rails 中 监听 应用的启动和关闭,

请问应该怎么实现呢?

我知道,把一个 .rb文件 放在 APP\config\initializers 目录下,Rails启动时会自动运行它,权且当这是 监听应用Startup的方法吧,
那么 Shutdown 呢?在开发模式下,我总是 使用 Ctrl + C 结束 Rails应用, 我不知道 有什么好的方法能让我抓到 应用被关闭的事件。

请熟悉 Rails 的朋友 给点建议。

难道是我的想法错了么? Rails 和 Java在处理此需求时的方法 有什么不同吗?
我相信在Rails中应用中也会有像servlet listener那样的需求场景,Rails是如何应对的呢?

我一定要等到这个问题 有解决方法。 :shock:

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • java_ldc 2011-11-24 15:23
    已采纳

    1.启动,在/config/initializers 下创建一个文件,然后监听rails的启动。
    2.同样在该目录下 重写 Ruby Kernel 的一个方法(at_exit) 去监听 rails 的关闭。

    A.文件名:awe_servlet_context_listener.rb
    B.文件内容如下:
    puts 'start......~~~~~~~~~~~~~~~~~~~~~~~~'
    at_exit do
    puts 'bye...~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
    end
    C.存放目录 /config/initializers

    点赞 打赏 评论
  • cutdeer 2011-11-23 15:23

    好像RUBY的应用服务器没有容器这个概念 它更加像CGI 来个请求 运行一个进程去执行 执行完后 进程销毁掉

    所以 ruby的应用在线上运行时,也可以随时重启服务器

    点赞 打赏 评论
  • cutdeer 2011-11-23 15:34

    监听器在JAVA中是在servlet中定义的,ruby中类似于servelt的rack并没有定义类似监听器的技术

    不晓得其它的特定应用服务器有实现没有

    像ruby这样活的元编程语言,你可以轻松的进行AOP编程的

    点赞 打赏 评论
  • cutdeer 2011-11-25 09:38

    @java-admin 的方法应该可以实现
    对应用服务器的启动流程不是很了解,不知道在FASTCGI这样的多进程的时候,会出现一个什么样的情况. 每个进程就是一个RUBY VM,到时会进程退出的时候会调用at_exit吗?

    我觉得不应该用SERVLET的场景来思考RACK
    在RACK中,并没有定义像SERVLET里中application对象,所以不存在服务器的既出要保存application里的数据.
    你可以把它存到外面数据里面,比如MEMCACHE,或数据库

    点赞 打赏 评论
  • cutdeer 2011-11-28 14:02

    后台任务你可以看一下现在的gem满足你的需求不

    https://www.ruby-toolbox.com/categories/Background_Jobs

    Resque和Delayed_job都是挺不错的

    点赞 打赏 评论

相关推荐 更多相似问题