使用 plackup 重新加载应用
这是我的译文,原文:
http://advent.plackperl.org/2009/12/day-4-reloading-applications.html
上次文章我到了一些 plackup 命令行的基本功能,今天会学习更多
自动重新加载应用
在开发的过程中,我们常常会修改我的 Perl 代码。然后存成 .psgi 和 .pm 文件。因为 Plack 的服务通过 plackup 的命令来运行,所以你的 Perl 代码(PSGI 的应用)需要编译和运行多次。所以你需要常常重起你的服务,这是相当的痛苦的一件事情。
所以这有一个选项可以监控你的工作目录内的文件修改,检查到有必要时,会然后自动 reload 你的应用-r (or -reload).
$ plackup -r hello.psg
默认这只会监控你的当前目录的代码文件的修改,如果你想修改这个默认的值,可以使用 -R 的选项。
$ plackup -R lib,/path/to/scripts hello.psgi
正如你所见的,这是能同时支持监控多个路径的,默认的是不断的扫描整个目录,如果你是使用的 Linux 支持 Linux::Inotify2 和是使用的 Mac 支持 Mac::FSEvents 。你可以使用文件系统本身的通知,这是更加的高效的。
-r vs 服务器自动发现
我们知道,plackup 会自动的选择帮你加载 Web 服务器,所以如果你的 PSGI 的应用使用了一些事件的模块,象 AnyEvent, POE or Coro 之类,你的后端的服务器就会被修改成使用这个。但有时自动的选择不能正常工作,是错误的。这时我们要自己手工的选择使用 -r 的选项。然后 plackup 会使用延迟加载技术来重新加载你指定的应用重起你的应用派生程序来处理。所以推荐你自己使用 -r 设置服务器和 -s 的选项一起使用。
加载出错?shotgun 和预加载模块
重新加载模块和应用在一些长时间跑的 Perl 应用中容易生产问题,象模块的变量重新定义或被覆盖,然后会产生卡住之类不正常的状态。
Plack 现在有一个 Shotgun 的 loader 方法。这个的灵感也是来自 Rack 中的 shotgun。解决了加载应用程序的请求要求应用程序的重载问题。
使用 Shotgun loader 的方便非常容易
$ plackup -L Shotgun myapp.psgi
这将延迟加载直到运行时应用程序的编译时,当一个新的请求来时, 会 fork 一个新的子进程来编译你的应用然后通过管道返回 PSGI 的响应。您还可以预载一些模块,以减少编译您的应用程序的时间。
例如,你的应用程序需要使用 Moose 和 DBIx::Class ,你能使用这个命令:
$ plackup -MMoose -MDBIx::Class -L Shotgun myapp.psgi
这可以减少你的程序,在运行时需要请求模块文件然后在编译的时间。
建议继续学习:
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:扶凯 来源: 扶凯
- 标签: plackup
- 发布时间:2011-06-24 12:25:48
- [61] 如何拿下简短的域名
- [58] Go Reflect 性能
- [56] Oracle MTS模式下 进程地址与会话信
- [56] 图书馆的世界纪录
- [53] 【社会化设计】自我(self)部分――欢迎区
- [51] IOS安全–浅谈关于IOS加固的几种方法
- [47] android 开发入门
- [45] 读书笔记-壹百度:百度十年千倍的29条法则
- [35] 界面设计速成
- [32] 视觉调整-设计师 vs. 逻辑