问题标签 [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.

0 投票
1 回答
132 浏览

perl - 如何本地化 Perl 中 Moo 对象的属性内的对象?

我有一个存储 LWP::UserAgent 的对象。我想使用不同的 cookie jar 来与那个 UA 进行不同的调用,所以我决定在cookie_jar local打电话的时候进行。

以下代码显示了我在没有调试内容的情况下所做的事情(用于阅读,而不是运行)。下面是另一个有大量调试输出的版本。

所以基本上我决定在本地覆盖cookie jar。不幸的是,当我们调用get它时,它仍然会使用最初位于 UA 对象内的 cookie jar。

如您所见,HTTP::Cookies 对象已正确本地化和替换。地址看起来完全正确。

但输出p讲述了一个不同的故事。LWP::UA 根本没有使用localcookie jar。那仍然是一个新鲜的,空的。

我怎样才能让它使用那个local呢?

我尝试过使用 Moo、Moose 和经典bless对象。都表现出这种行为。


编辑:既然这出现在评论中,让我提供更多背景信息,为什么我需要这样做。这将是一个有点咆哮。

TLDR:为什么我不想要替代解决方案但理解并解决问题

我正在构建一个基于 Dancer2 的 web 应用程序,它将与 Plack 和多个工作人员一起运行(Twiggy::Prefork - 多个分叉中的多个线程)。它将允许用户使用第三方公司的服务。那家公司提供 SOAP 网络服务。将我的应用程序视为此服务的自定义前端。网络服务上有一个“登录用户”的调用。它为该特定用户返回一个 cookie (sessionid),我们需要在每次连续调用时传递该 cookie。

为了做 SOAP 的东西,我使用 XML::Compile::WSDL11。编译这个东西非常昂贵,所以我不想在每次处理路由时都这样做。那将是低效的。因此,SOAP 客户端将在应用程序启动时从 WSDL 文件编译。然后它将由所有工人共享。

如果客户端对象是共享的,那么内部的用户代理也是共享的。饼干罐也是如此。这意味着如果同时有两个请求,则 sessionid 可能会混淆。该应用程序最终可能会向用户发送错误的内容。

这就是我决定本地化 cookie jar 的原因。如果它是请求的本地唯一请求,它将永远无法干扰并行发生的另一个工作人员的请求。只是为每个请求制作一个新的 cookie jar 不会削减它。它们仍然会被共享,甚至可能会丢失,因为在最坏的情况下它们会相互覆盖。

另一种方法是实现锁定机制,但这完全超出了拥有多个工作人员的目的。

我看到的唯一其他解决方案是一起使用另一个 SOAP 客户端。有 SOAP::WSDL,它不能在较新的 Perls 上运行。根据 CPAN 测试人员的说法,它在 5.18 上中断,我已经验证了这一点。它会更有效,因为它像代码生成器一样工作,并且预先创建比每次都编译 WSDL 文件更便宜的类。不过既然坏了,那就没办法了。

SOAP::Lite 将编译 WSDL,而且效果很差。如果我认为可以避免的话,任何人都不应该在生产中使用它。我看到的唯一替代方法是在不使用 WSDL 文件的情况下实现调用,并直接使用 XML 解析器解析结果,而忽略模式。但这些都是很大的结果。会很不方便。

我对这个咆哮的结论是,我真的很想了解为什么 Perl 不想在这种情况下本地化 cookie jar 并修复它。

0 投票
1 回答
922 浏览

perl - 截至 2014 年,什么技术可以很好地替代 mod_perl?

我已经使用mod_perl多年了。我有一些模块在早期状态下处理 Apache 请求,基本上是基于更改来自 Apache 的正常响应的请求标头的自定义响应,例如自定义响应代码和类似的东西。

其他人告诉我,现在有更好的方法可以快速运行 Perl 应用程序(例如,使用仅将 subs 作为请求处理程序的持久解释器,类似于mod_perl),但他们都不能很好地告诉我权威或经验证明与mod_perl一样快(甚至更好,如果更好的话)的工作。

我想就该主题获得更有经验的意见,并且我认为 StackOverflow 可以成为从这些人那里获得答案的理想场所。

那么,截至 2014 年,哪些mod_perl的替代品被证明是好的甚至更好(在性能和可靠性方面),为什么?与mod_perl相比,您对它们有哪些优点或缺点?

0 投票
1 回答
676 浏览

perl - 如何使用 PSGI 安装 mojolicious 应用程序?

我想使用plackupstarman与其他人一起安装Mojolicious应用程序。

这里的文档描述了如何使用单个应用程序,但没有描述如何让 Mojolicious 应用程序与其他基于Catalyst或基于Dancer的应用程序在同一个 plackup/starman 实例后共存。

我想做类似的事情

Prospero 是一个催化剂应用程序,而 vizela 是一个 mojolicious 应用程序,但文档中没有关于这个方向的提示 - 或者我可能没有找到它。

以及如何完成这项工作的建议?

不幸的是,部署在 nginx 或 apache 后面不是一种选择,不同的服务器也不是,因为需要为所有数据提供一个源(跨服务器限制)。

谢谢

0 投票
1 回答
134 浏览

apache - 跟踪apache和反向代理之间的数据流?

我有一个 Web 应用程序作为 Apache httpd 后面的反向代理运行。时不时地,我的网络请求会返回错误的内容。特别是,对主页、图像、css 文件或 javascript 文件的请求将返回先前生成的主页版本,因为text/plain缺少 doctype 后的换行符。

我不知道问题出在哪里——我已经关闭了我在 httpd 中知道的所有缓存。当问题发生时,web-app 的日志功能不会显示请求,而 httpd 会显示。

有什么方法可以让我观察 httpd 和 web-app 之间发生的事情,以便查看错误是 web-app 还是 httpd?我不确定我知道如何捕捉这个……</p>

如果有帮助,该网络应用程序是基于 Plack 的应用程序,在 Starman 下运行。

0 投票
1 回答
79 浏览

perl - 从超类访问 __DATA__

我有一个名为 Response 的超类:

和一个名为 URIError 的子类:

当调用 URIError->response 时,行

在 Response 类中,不会从 URIError 类中获取DATA部分内容。

实现这一点的语法是什么?

0 投票
1 回答
452 浏览

perl - 如何在后台运行 Plack::Runner?

我正在尝试使用Plack::Runner. 如何在后台运行它?我尝试了以下方法:

它似乎忽略了-D。我也尝试过'--daemon',但这也不起作用。

谢谢!

0 投票
2 回答
275 浏览

perl - 您如何将 Plack::Middleware::Session 与 Twiggy 服务器一起使用?

我有一个Twiggy基于 perl 服务器:

它工作正常,但现在我想向它添加会话管理(以处理用户身份验证)。我看到 CPAN 上有一个Plack::Middleware::Session模块,但基于它的文档和 Twiggy,我不知道如何将两者结合使用。我有理由相信这是可能的,因为在我的 $app 中我正在处理 Plack 的东西。

除了使用Plack::Middleware::Session之外,还有其他方法可以轻松获取和设置 cookie 值并维护会话状态以进行身份​​验证吗?(用户请求的每个页面加载都在服务器的新分支中处理。)

0 投票
1 回答
621 浏览

perl - 是否可以在不读取整个请求正文的情况下在 Plack::Middleware 中强制执行最大上传大小?

我刚刚将一个PageKit (mod_perl) 应用程序转换为Plack。这意味着我现在需要某种方法来强制执行Apache2::Reques t 之前处理的 POST_MAX/MAX_BODY。最简单的方法可能是将 nginx 放在应用程序前面,但应用程序已经位于HAProxy后面,我不知道如何使用 HAProxy 执行此操作。

所以,我的问题是如何在不先阅读整个请求正文的情况下在Plack::Middleware中强制执行最大正文大小?

具体来说,我关心文件上传。通过Plack::Request::Upload检查大小为时已晚,因为此时整个正文都已被读取。该应用程序将通过Starman部署,因此psgix.streaming应该如此true

0 投票
0 回答
2160 浏览

nginx - nginx 重定向和基本身份验证问题

我有一个服务(Plack),它在http://myhost.com:5000上侦听 我想用基本身份验证密码保护对它的访问

当我在 nginx conf 文件中设置服务器指令时,我与 Plack 发生冲突(无法绑定到 0.0.0.0:5000,因为它被 Plack 使用,反之亦然)。所以这让我无处可去。

然后我在 conf 文件中启用了 Basic Auth,其中的 location 指令为:

当 nginx "/" 被命中时,它会将其重定向到端口 5000 并询问用户名/密码。但是我的应用程序依赖于包含端口(http://myhost.com:5000/)的 url 来查找资源,并且端口从请求中被剥离,所以它最终是http://myhost.com我在所有资源/css/images/javascripts 等上都得到了 404。尝试了各种指令,如 port_redirection 等。

我尝试使用以下方式重写 URL:

它得到了想要的结果(http://myhost.com:5000)并且找到了所有资源,但基本身份验证永远不会启动,所以我从来没有收到询问用户名/密码的提示

作为最后一次尝试,它尝试使用直接保护 url

但这也不起作用。

有人可以帮忙吗?

0 投票
2 回答
400 浏览

perl - 使用 perl Dancer/plack/Starman 和多个工作人员的会话

我正在通过 plack 使用 Starman 运行一个 perl Dancer 应用程序(希望这是正确的描述),而且大多数情况下这是一种无痛的体验。我最近才试图让会话工作(非常简单的东西 - 我只想存储几个字符串,我正在使用会话:“简单”),并且在运行多个 Starman 时遇到了非常奇怪的问题工作人员。

使用以下非常简单的代码(在底部)会产生以下结果:

独立应用程序:工作正常 - 单击它时计数器会增加。

Starman - 1 名工人:工作正常

Starman - 2+ 工人:会话似乎存在大约 1 秒,随后被销毁 - 计数器总是在非常短的时间后“过期”。它似乎不是特定于工作人员的会话,它只是重置为空。如果你每秒敲击链接不止一次,它通常会永远增加(或者只要我愿意测试它)。

我做错了什么,或者这只是行不通吗?这不是非常关键,但能够让简单的会话正常工作会很好。

谢谢,

戴夫