运行 作为持久服务的 Raku Cro 应用程序

Running a Raku Cro app as a persistent service

我想 运行 perl6/raku Cro 应用程序作为前端网络服务器后面的服务。

Just 运行ning cro run 不会在段错误和重启后处理重启。

以前使用 perl5 我使用过 FastCGI - 但是 Cro::HTTP::ServerCro::HTTP::Server.new().start() 习语看起来与 FastCGI::Native 的 while $fcgi.accept() {} 示例不兼容。

cro stub 生成的 service.p6 确实有一个 SIGINT 处理程序,但是我不确定这是否足以在 systemctl 服务中指向它,即

[Service]
ExecStart = /path/to/service.p6

人们目前如何托管 Cro 应用程序?

cro run 旨在用作开发工具,而不是部署工具,因此确实不是托管服务的好选择。

我直接处理的所有 Cro 服务都是容器化的 (some guidance on that here),然后 运行 在托管的 Kubernetes 集群上。 Kubernetes 负责自动重启、推出新版本等。我也知道 docker-compose 被用来代替 Kubernetes,我想这是可行的,但我相信这也被视为主要的开发工具。

将其设置为 systemctl 服务应该也能正常工作,前提是将其配置为始终重启。但是,似乎 you'd want to handle SIGTERM 可以正常关闭,而不是 SIGINT (处理两者都没有错)。

我还在 Cro 前面放置了一个前端 Web 服务器(使用 Apache,尽管 nginx 也是一个不错的选择),并且还使用它来缓存一些静态内容(使用 content-control在我的路线中描述可缓存性)。