我已经成功地使用 Plack + Starman 成功地在我的开发机器上为我的 Catalyst 应用程序提供服务,使用的守护程序脚本基于我在 Dave Rolsky 的 Silki 发行版中找到的一个守护程序脚本。

然后我将 nginx 设置为反向代理到我的 Starman 服务器,并为 nginx 服务的静态目录设置别名。到现在为止还挺好。但是,我不知道我的应用程序 STDERR 应该登录到哪里。它没有到达 nginx(我想这是有道理的)但我找不到太多关于 Starman 可能在哪里记录它的文档 - 如果在任何地方。我确实看过 Plack 的中间件模块,但只看到了访问日志的选项。

有人能帮我吗?

最佳答案

它无处可去。 Catalyst::Log 正在向 STDERR 发送数据,init 脚本正在向 STDERR 发送 /dev/null

您有几个基本选择:

  • Catalyst::Log 替换为 Catalyst::Log::Log4perl 之类的东西,或者只是 Catalyst::Log 的子类并覆盖了 _send_to_log —— 任何一个都允许您将日志输出发送到 STDERR 以外的其他地方。
  • 编写一些在 PSGI 级别运行的代码来管理日志文件并重新打开 STDERR。我试过了,这不是很愉快。日志文件比看起来更难。
  • 改用 FastCGI,您将有一个错误流,将日志输出发送回网络服务器。你仍然可以通过 Plack::Handler::FCGI/Plack::Handler::FCGI::Engine 使用 Plack(我推荐后者,因为 FCGI::Engine 代码比 FCGI.pm 更新更好)。
  • 关于perl - 在哪里可以找到使用 Nginx、Starman、Plack 和 Catalyst 的应用程序运行时错误?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3719935/

    10-13 07:46