在自定义中间件中未捕获的异常后,类重新加载停止

Mar*_*ben 10 middleware ruby-on-rails

我编写了自己的中间件来为我们的应用程序提供API端点.中间件加载提供API方法的类,并将请求路由到适当的类/方法.这些类是通过动态加载的String#constantize.

在开发模式下运行时,会自动重新加载类.但是,如果存在未捕获的异常 - 随后由故障安全中间件处理 - 自动重新加载将停止工作.constantize仍在被召唤,但它似乎回归旧班.

看起来还有其他东西可以卸载类,而一个未捕获的异常会破坏它.这可能是什么?

运行Ruby 1.8.7,Rails 2.3.3和Thin 1.2.2.

小智 0

Rails 会缓存大量类,并在开发模式下或当 config.cache_classes 设置为 true 时卸载并重新加载它们。以下是关于该主题的一些想法,也解释了它的工作原理。 http://www.spacevatican.org/2008/9/28/required-or-not/

并不是告诉您您做错了,但重载 String#constantize 似乎是重新加载代码的一种狡猾方法。您是否考虑过使用 watchr 之类的东西来运行开发中的应用程序服务器,并在将文件保存在 API 子树中时重新启动它? https://github.com/mynyml/watchr/

另外,有关如何进一步调试的一些随机想法,请查看此答案: https: //stackoverflow.com/a/7907289/632022