问题标签 [psgi]
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.
cgi - 如何获取 Mason dhandler 组件名称以进行查询?
在处理查询之前,我试图弄清楚某些组件是否可以真正处理它;
我正在尝试使用
但它不返回给定查询的 dhandler 组件。
有没有办法获取这样的组件?
perl - 在 Plack::Builder 中挂载“主机”
Plack::Builder的概要和这个答案说:
我尝试了以下方法:
但是当尝试使用plackup
got 运行它时:
加载 /tmp/app.psgi 时出错:路径需要以 / 开头 /home/cw/.anyenv/envs/pleenv/versions/5.20.3/lib/perl5/site_perl/5.20.3/Plack/Builder.pm第 108 行。
怎么了?
perl - 并行运行系统命令时,Windows 上的 Perl Web 服务崩溃
我正在为客户现代化一个基于 Perl 的系统。该系统在 Windows (Strawberry Perl) 上运行,连接到数据库,并调用一些脚本,这些脚本又运行其他程序。
我的第一个想法是编写一个 PSGI 应用程序并使用 curl 触发该应用程序。我最初的实验似乎很有效,尽管只使用了 Twiggy 服务器。(Thrall 严重泄漏内存,并且像 Starman 这样的分叉服务器无法在 Windows 上运行。)
我想通过并行运行其他外部命令来进一步改进系统。我尝试过使用 AnyEvent 或 Parallel::ForkManager。它适用于独立脚本,但在 Twiggy 内部运行时,Perl 崩溃。
我的问题是:如何并行执行外部命令,以便 Twiggy(或备用服务器,如果这是 Twiggy 的问题)不会崩溃?
apache - 为什么 Dancer 应用在 uWSGI + Apache 下失败?
我的Dancer应用程序在 uWSGI (2.0.7) + Apache (2.4.10) 组合下失败,而它在其他环境(uWSGI + nginx、Starman + Apache、Dancer 自己的开发服务器)中自由运行。我在日志中找不到任何有意义的信息。所以我制作了简单的测试应用程序,例如
然后将默认复制production.yml
到uwsgi.yml
,链接bin/app.pl
到bin/app.psgi
创建tset.ini
这样的:
使这个 ini 可用于 uWsgi 中/etc/uwsgi/apps-available
,并将其链接到/etc/uwsgi/apps-enabled
.
重新启动uwsgi
服务。
然后对于 Apache (2.4.10) 模块mod-proxy-uwsgi
在我的虚拟主机 conf 中添加了几行:
这似乎是最脆弱的一点,因为我觉得我需要在uWSGIModifier1 5
这里设置但没有弄清楚在哪里以及如何设置?
重新启动 Apache 并得到“内部服务器错误”。在 uwsgi 日志中,我只看到:
这个“请求的修饰符不可用”是什么?
在 apache error.log 中没有条目,在 access.log 中有条目,但除了状态 500 之外没有其他信息。
这种行为可以通过上述步骤重现,所以我希望你弄清楚,这种组合有什么问题?
perl - 多站点感知 PSGI 应用程序开发
Plack::Builder允许挂载多个主机,例如以下代码段:
例如
load_site_names
返回一个站点列表,如,http://example.com
,http://some.other.site.com
...- 每个“虚拟主机”都将使用相同的
Some::PsgiFramework::MyApp
- 只是他们的配置不同
我完全需要上述内容 - 需要开发一个简单的 Web 应用程序,该应用程序应该部署在不同(低流量)站点上,并且不希望为每个站点设置不同的 PSGI 服务器。
然而,Plack 的作者自己说(在Plack::Request中)
请注意,此模块旨在供 Plack 中间件开发人员和 Web 应用程序框架开发人员使用,而不是应用程序开发人员(最终用户)。
直接使用 Plack::Request 编写您的 Web 应用程序当然是可能的,但不建议这样做:这就像使用 mod_perl 的 Apache::Request: 这样做一样,但是级别太低了。
如果您正在编写 Web 应用程序,而不是框架,那么我们鼓励您使用支持 PSGI ( http://plackperl.org/#frameworks ) 的 Web 应用程序框架之一,或者查看诸如 HTTP::Engine 之类的模块在 PSGI 之上提供更高级别的请求和响应 API。
这就是问题所在。
我在 MetaCPAN 中检查了许多不同的基于 PSGI 的框架。并且AFAIK每个都是基于单例的,例如,不允许编写可以为同一个不同站点多次共享(安装)的应用程序app.psgi
。
所以问题是:
- 我错过了 MetaCPAN(或文档)中的某些内容,并且这里存在 任何
app.psgi
(轻量级)网络框架,它允许开发可在?中多次安装的应用程序。 - 还是我被迫发展
Just Another My Own PSGI Framework
?(老实说,我没有检查催化剂——因为它太重了) - 或者只是对“安装”有很深的理解?
perl - 舞者唯一请求 ID
Dancer 中是否有任何唯一的请求 ID?
Apache 有 mod_unique_id:http ://httpd.apache.org/docs/current/mod/mod_unique_id.html
PSGI/Plack 有一个中间件模块:http ://search.cpan.org/~bayashi/Plack-Middleware-RequestId-0.02/lib/Plack/Middleware/RequestId.pm
但是我错过了 Dancer 中的任何原生内容吗?
perl - PSGI - 每个 prefork-child 的构造函数
我对分叉后每个孩子的构造函数有疑问。例如:
此代码有效,但这是不好的做法。我想创造类似的东西
我希望有人向我解释它如何通过像 Starman 或 Feersum 这样的 prefork-server 工作(但是一个人“Audrey Tang”告诉我 Feersum 这不是一个好主意)
所以 - 谢谢你的回答
perl - 如何在没有响应的情况下关闭 PSGI 连接?
我的应用程序希望将$env->{'psgix.io'}
句柄传递给单独的进程以进行进一步的 WebSocket 处理。通过 UNIX socketdup()
的句柄传递,所以我真的不关心从应用程序返回任何答案到 PSGI 服务器。但是我看不到只是静默关闭连接而不从应用程序返回任何响应的选项。当我什么都不返回时,PSGI 服务器不高兴并记录“500 内部服务器错误”。当我只返回类似的代码引用sub {}
时,Twiggy 很高兴,但 uWSGI 却不高兴。任何其他有效的 PSGI 答案都会破坏 WebSocket 协议。
我尝试dup()
原始处理并返回 WebSocket 握手的最后一部分作为 PSGI 答案,它与 uWSGI 一起工作,但与 Twiggy 无关。
我查看了不同的 PSGI/WebSocket 实现,他们执行以下操作之一:
- 在 WebSocket 关闭之前不要从处理程序返回;
- 返回某种
sub {}
.
在 PSGI 协议中返回无应答和静默关闭连接的正确方法是什么?
更新:看起来 Twiggy[]
用作PSGI 取消消息。我的补丁uwsgi
已成功合并。
multithreading - 如何让 PSGI 程序每个进程而不是每个线程只进行一次昂贵的初始化?
交叉帖子:http ://perlmonks.org/?node_id=1191821
考虑app.psgi
:
测量plackup
(HTTP::Server::PSGI: Accepting connections at http://0:5000/
):
测量thrall
(Starting Thrall/0.0305 (MSWin32) http server listening at port 5000
):
这种性能是不可接受的,因为初始化发生了好几次,尽管state
变量。你是怎么做到的,所以它只发生一次?
perl - 在后台线程中获取 Plack 会话 ID
对不起,我真的试过了,但我找不到这个简单问题的解决方案。
我需要在 plack 中获取 id session,但不是通过浏览器,我想在主命名空间 perl plack 代码中做内部背景。
这是我的代码:
如果我访问根路径http://192.168.1.1:5000,我会得到:
如果我访问http://192.168.1.1:5000/id
我想从 $global 变量的文件中写入 id 会话:
在目标文件中我什么也没得到,但是如果我将变量更改为此,它可以工作:
也许问题是因为这段文字:
线程池中的线程由系统管理。这些线程不绑定到当前请求。因此,Session 对他们不可用。
资料来源: 我可以在后台线程中访问会话吗?
我的目标只是获取 id 并打开此文件以从后台执行其他操作。我想避免将另一个文件保存到这个简单的任务中,避免使用 sql 等。
因为我已经将数据会话保存在一个文件中:
我感谢任何建议,也许这可以通过另一种方式实现。
非常感谢。