问题标签 [plack]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
perl - 为什么 Test::WWW::Mechanize::PSGI 使用端口?
我有一些看起来像这样的代码:
但是,一旦get_ok()
被调用,我就会收到以下警告:
是的,我正在将该端口用于其他用途。来自Test::WWW::Mechanize::PSGI 的文档:
此模块允许您测试 PSGI Web 应用程序,但不需要服务器或发出 HTTP 请求。相反,它将 HTTP 请求对象直接传递给 PSGI。
所以理论上,我不需要指定端口,但我收到了上述警告,并且获取的页面返回 500(它们在浏览器中工作正常)。我错过了什么?
- 测试::WWW::Mechanize::PSGI 版本 0.35
- Plack 版本 1.0030
- 催化剂版本 5.90051
更改MyApp->run
为MyApp->psgi_app
结果:
可以通过以下方式复制此错误:
multithreading - 如何在后台运行 Plack 请求处理程序?
我有一个简单的 Plack 应用程序(类似于Plack::App::GitHub::WebHook),我使用plackup
. 我在请求处理程序中执行了一个冗长的操作,这使得应用程序在操作完成之前无法响应后续请求。如何在后台执行操作而不阻塞其他请求?还有一个后续问题,我怎样才能让后台队列中最多运行一个作业?
我习惯了libdispatch,所以我喜欢这样的东西:
perl - Starman 用 Dancer REST api 吃掉所有的内存
我用 perl 框架 Dancer 开发了一个 RESTful 应用程序。此应用程序需要近 1 GB 的内存,加载需要 30 秒。./bin/app.pl
此应用程序在单个用户的本地测试中运行良好,然后我尝试使用 Starman(单独或使用 plackup,有和没有保持活动)以几种不同的方式部署以供多租户使用:
部署成功,但 Starman 为每个查询分配了一些内存,不再释放,因此应用程序很快就会耗尽内存。
我阅读了 Starman、PSGI 和 Dancer 部署的所有文档,包括对NGINX/Starman/Dancer的非常好的解释以及Starman 和内存的类似错误,但它不能解决这个问题,因为我禁用了 keep-alive 和 Starman 仍然保留记忆。
知道为什么 Starman 会吃掉我的记忆吗?谢谢!
perl - 如何发现 app.psgi 进程在哪个服务器上运行?
有没有办法发现app.psgi
正在运行的服务器?
例如,我正在寻找一些关于如何解决 app.psgi 中的下一个代码片段的想法:
检查PLACK_ENV
环境变量不是解决方案...
perl - 窥探不同 plack 中间件之间的 http 标头
如果我理解正确,PSGI 应用程序的工作方式如下:
- 从浏览器获取请求
- 请求通过一些中间件按顺序“冒泡”,因为它们在
builder
- 请求来到我的应用程序
- 我的应用程序产生了一些响应
- 这通过一些中间件再次冒泡
- 最后将响应发送到浏览器
当请求到达我的$app
.
问题是:
当请求通过许多中间件到达我的应用程序以及响应再次通过中间件发出时,如何调试打印实际状态。headers
所以,有一个 (simplified) app.psgi
,如下所示:
这可能不像这样容易,
所以添加赏金:) ;)
perl - 在 Catalyst 中使用 Plack::Middleware 兼容异常时缺少日志输出
对于我的Catalyst
项目,我使用的是基于自己Moose
的异常类型,它Catalyst
与我的命令行应用程序兼容。
为了向我的 Catalyst REST 接口的客户端提供错误消息,我实现了一个code
子例程,它提供 http 状态代码作为我的异常类的一部分。这样,我想Plack::Middleware
按照Plack::Middleware::HTTPExceptions
.
一切正常。异常以我希望它们返回的方式返回给客户端。
我的问题是:每当我抛出一个被中间件捕获的异常时,我的日志记录 ( ) 就会丢失,并且我在的 web 服务器 perl 脚本输出Log::Log4perl
中既找不到踪迹也找不到错误。Catalyst
每当我抛出没有被我的异常类封装的错误,而是罕见的字符串(如die "BOOM!"
)时,就会写入日志输出并记录错误(显然,错误被捕获Catalyst
并且不会重新抛出)。
Catalyst
即使必须将异常重新抛出到中间件,我如何才能告诉保持记录请求?
perl - twiggy plack anyevent 在主循环阻塞时如何处理请求?
我对 Plack、Twiggy 和 AnyEvent 很陌生,遇到了问题。
我有面向客户端的应用程序服务器,它们向后端游戏服务器发出请求。游戏服务器做了几件事。
1. 当请求从应用服务器到达时,它们对对象进行处理(例如,移动、购买、删除或启动对象)。
2. 他们定期更新所有“可移动”物体的位置(更新纬度/经度)。
为了尝试实现这一点,我设置了一个非常基本的 psgi 文件,它执行以下操作: AnyEvent 用于每两秒(重复)更新对象的纬度/经度。
handler_rpc 只是处理从应用程序服务器启动的请求,以对对象执行某些操作。为了完整起见,应用服务器上的代码如下;
在游戏服务器端,代码如下所示
这些部件单独工作。我的意思是,如果我只是担心获取和处理对游戏服务器的 RPC 请求,那么一切正常。
如果我只是使用 AnyEvent 定期更新可以正常工作的对象位置。
当我想在同一组对象上同时执行这两项操作时,就会出现问题。
它失败是因为 $cond->recv 阻塞并且我们实际上并没有到达 $app 所以 Twiggy 不处理请求或者如果我移动 $cond 行,我们启动应用程序并且 twiggy 等待来自应用程序的请求服务器,但 AnyEvent 事件不会发生(或它们发生一次)。
Twiggy 应该是非阻塞的(我认为这在这里很有用)并且在构建时考虑了 AnyEvent,所以我假设有一种方法可以做我想做的事,但是环顾了一会儿,我不是越来越远。
有没有办法使用 Twiggy、Plack 和 AnyEvent 来做到这一点,还是我走错了方向?如果这有点正确,我该如何解决?
还有另一种方法可以更好地解决这个问题吗?
正如我所说,如果我没有提供基本信息,我对此很陌生,很抱歉。请询问,我会更新我错过的任何内容。
谢谢。
apache - 使用 FastCGI 在 Apache 之外运行 Plack PSGI Perl 应用程序的最佳方式?
我目前正在使用 Plack::Handler::Apache2 调用的 PSGI 应用程序运行 Apache/mod_perl。我们遇到的问题是每个 Apache 进程都使用到 PostgreSQL 数据库的连接,这很昂贵。为了解决这个问题,我们计划将 PSGI 应用程序与 Apache 分开运行,并让所有 Apache 进程通过 UNIX 域套接字与其通信。在我的情况下,你会推荐什么设置?
我的计划是使用 plakup 运行它:
我询问了 Plack 的作者 Tatsuhiko Miyagawa,是否建议将 plackup -s FCGI 用于生产目的。他提供了以下答案:
“虽然它可以用于生产,但我通常建议使用其他专用服务器,例如 Starman、Starlet 或 uwsgi。FCGI 是一个例外,因为除了默认的 Plack::Handler 之外,我们没有特定的 FCGI 守护进程。我们有一个计划将 FCGI 从 Plack 核心中分离出来并单独安装。”
现在,直到 FCGI 从 Plack 中分离出来,问题是,在 Apache 之外使用 FastCGI 运行 PSGI 应用程序的最佳方法是什么?
perl - 将带有第一个请求的 html 页面返回到在端口 5000 本地运行的 Json Rpc Dispatcher 服务器
我有 Json Rpc Dispatcher Server 在我的本地主机上运行的端口 5000 我需要在访问时获取一个 html 索引页面
这里是 app.psgi 使用 JSON::RPC::Dispatcher;
现在它只返回带有 GET guess 或 sum 方法请求的 json。
我需要一个 GET 请求,它将返回一个 html 页面并加载一些 Javascript 可能与根请求
perl - 如何在 perl plack 应用程序中实现非阻塞响应?
我正在尝试使用Twiggy::Server
(这意味着一个 plack 应用程序)编写一个基于 perl 的网络服务器。我想通过运行一些可能耗时的子例程来响应对某些数据的请求(来自网页上的 ajax 调用),该子例程生成数据,然后将其转换为 JSON 字符串以返回到客户端网页。
您可以在此处查看我的服务器的精简测试版本:http: //pastebin.com/iNaDTVwL
该示例显示了我在当前实现中面临的问题;用于AnyEvent::ForkManager
执行非阻塞部分会导致截断“大”json 响应。
该文档将完美地回答我的问题(并更好地解释我正在尝试做的事情):https ://github.com/jjn1056/Example-PlackStreamingAndNonblocking ...如果它完成了。我只是错过了做非阻塞的“正确”方式,而不是使用AnyEvent::ForkManager
它看起来有点像黑客。