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

0 投票
1 回答
264 浏览

configuration - 在 Starman(或其他 PSGI 服务器)中配置目录别名

我习惯于在 Apache httpd.conf 中为不同的目录设置别名。例如,以下对我有用

然后我可以包含路径,例如<script src="/lib/jquery/plugin/funky.js"></script>无论应用程序路径是什么。

我正在尝试 Starman(以及其他 PSGI 服务器,例如 HTTP::Server::PSGI),但无法找到任何方法来设置配置参数,例如目录别名。

这可以做到吗?如何?

0 投票
3 回答
981 浏览

perl - PSGI 回应:哪些类型的文件句柄可以与 PSGI 和 Plack 一起使用?

PSGI规范将 HTTP 响应定义为由三部分组成,其中第三部分可以是数组引用或文件句柄。文件句柄可能是:

一个 IO::Handle 类对象或内置文件句柄。

规范继续说:

服务器可以使用 fileno 和 Scalar::Util::reftype 检查主体是否是真实的文件句柄,如果它是具有文件描述符的真实文件句柄,它可以使用 sendfile(2) 等技术优化文件服务。

现在,我使用plackup(Plack 版本 0.9978)拼凑了一个命令行示例,似乎检查正文是否是真正的文件句柄会导致致命错误:

Can't locate object method "FILENO" via package "IO::Scalar" at /usr/lib/perl5/5.10/i686-cygwin/IO/Handle.pm line 390

这是命令行示例:

当然我不能使用文件句柄:

但我对什么有效,什么无效感兴趣。那么,Plack 在调用句柄时是否应该更加小心,FILENO以免遇到异常?

并添加另一个:

看起来文件句柄没有被识别为这样。错误信息是:

body should be an array ref or filehandle at /usr/lib/perl5/site_perl/5.10/Plack/Middleware/StackTrace.pm line 35

更新:

正如 ysth 在他的回答中所说,以下将起作用(至少在 Cygwin 上的 5.10.1 上):

但很明显,从失败的示例中可以看出某个地方存在问题,一旦我确定它实际上是什么,就会报告它。

0 投票
2 回答
802 浏览

perl - 多语言 PSGI-web 部署

我计划用 PSGI/Plack 开发一个 Web 应用程序。(可能与舞者,但尚未决定)。

应用程序应该是 utf8,多语言(使用 Locale::Maketext)和(ofc)将包含给定语言的一些静态页面。我的想法是将其部署在不同的语言域中en.example.com,例如de.example.com等。应用程序本身很简单,大多数情况下只会用本地化文本和其他一些(轻量级)功能填充模板。

在一台物理机上为多种基于语言的子域部署一个应用程序的最佳解决方案是什么?

我目前的研究以这个解决方案结束:需要为每个语言子域使用 Apache 及其基于名称的虚拟服务器。

问题:

  • 什么是最好的解决方案?
  • Starman 或其他纯 perl 服务器是否存在任何解决方案?如果是,如何?反向代理?
  • 纯 perl 解决方案会更好(更快)吗?
  • 我应该考虑其他解决方案吗?(fcgi、nginx 等...)

还有什么其他想法/事情会对发展本身产生影响吗?

0 投票
2 回答
1038 浏览

perl - 如何使用 Starman 设置类似 Apache 的基于名称的虚拟主机

我之前的问题中,我询问了多域解决方案,但问题太复杂了。

现在简而言之:

是否可以像使用 Apache 的指令一样使用 Starman(或任何其他纯 perl PSGI 服务器)设置基于名称的虚拟主机?<VirtualHost ...>还是我需要使用 Apache 来获得这种功能?

任何的想法?

0 投票
2 回答
228 浏览

perl - 一个 Plack 应用程序如何影响另一个?

我有这个:

$config_app配置值保存到文件app.cfg中并将其$app加载为配置文件。不需要在每个请求中读取配置文件。需要在应用程序开始时阅读它,并在更改时重新阅读。

实现这一目标的最佳方法是什么?

我唯一的想法是:应用程序会记住最后的 config_read_time,并且在每个请求中都会检查app.cfg. 如果文件被修改,将重新读取它。

这里有更好的解决方案吗?(意味着 $config_app 和 $app 之间的一些消息传递,例如当 $config_app 保存新配置时will send some message to $app: re-read the config

0 投票
2 回答
1782 浏览

perl - 为什么要提高 plackup(或 starman)的内存使用量?

我有这个简单的 PSGI 应用程序 (app.psgi)。

我被请求了上述 1000 次,并且内存使用量增加了。根据服务器的启动方式,得到:

  • plackup- 内存使用量在前 3 个请求时增加,并在接下来的 997 个请求中保持不变

  • plackup -r- 内存使用量随机增加(不是每次请求)4k。

  • starman- 像上面一样,内存使用量随机增加 4k,但速度较慢

问题是:

  • 为什么要提高内存使用率?泄漏在哪里,以及如何实现恒定的内存使用(尤其是在 starman 上),因为我不希望长期内存不足。(好的,可以定义例如 --max-requests 100),但这不是内存使用的答案。
  • 或者- 我的例子有什么问题?

如果有人也想测试这个 - 这是我的抓取脚本:

我的结果:

所以,

  • 为什么要plackup提出前 3 个请求?
  • plackup -r- 4k 增加(见最后几行) - 一开始更多
  • starman- 也加薪,但默认 5 个工人的速度较慢(3280->3912)

版本:

0 投票
3 回答
4012 浏览

perl - PSGI:它是什么,有什么大惊小怪的?

我一直在尝试确定我的 Web 项目是否适合使用 PSGI 实现,但我真的不知道在这个阶段它对我的应用程序有什么好处。

我真的不明白所有的大惊小怪。对我来说,PSGI 似乎是一个框架,它在不同的 Apache 模块之间提供了一个通用接口,让您可以在它们之间移动您的应用程序。例如,轻松地将您的应用程序从运行在 mod_perl 上移动到 fastcgi,并为在这两个选项上运行提供应用程序支持。

是这样吗,还是我错过了什么?

由于我和我的团队不仅参与了应用程序的开发,还参与了服务器的维护和设置工作,我不认为能够在 fastcgi、cgi 和 mod_perl 上运行对我们来说有什么价值,我们可以只需 mod_perl 就可以了。

我是否误解了 PSGI 功能,还是它不适合我的项目?

0 投票
1 回答
325 浏览

perl - Plack 应用程序如何记录到多个记录器?

Plack 中间件非常有用,例如配置独立于应用程序的日志目标。但是我还没有找到同时使用多个记录器的方法:

使用此配置,“SimpleLogger”被“ConsoleLogger”静音,但我想同时记录两者。

0 投票
2 回答
483 浏览

perl - Plack & 污点模式

是否推荐使用 perl 的污点模式开发 Plack 应用程序(中间件)?

如果是,如何在受污染的模式下启动 plackup 和/或 Starman?在使用 shebang 行轻松完成的简单 CGI 脚本中。

perl -T /path/to/{plackup|starman}做这份工作吗?或者这里有什么推荐的方法?还是不推荐?

关于 Plack+Taint 模式组合的任何想法、提示和文章?

0 投票
1 回答
1147 浏览

perl - 如何使用 Test::WWW::Mechanize::PSGI 测试 Dancer 应用程序?

我不确定为 www mechanize 设置脚本应用程序的正确方法。我确实尝试了至少一种可行的替代方案,但是我正在尝试通过测试传递配置,以便我可以使用测试套件使日志记录更安静。

在脚本上运行do似乎允许测试运行,但日志变量设置不正确,同时似乎有更好的方法来做到这一点。

更新

我想我可能离解决方案越来越近了......

我从Plack PSGI的Dancer::Deployment 文档中获取了这个。但是,我从测试中收到 500 错误。

DBI 错误在这里不相关,但它们是我得到的错误输出的一部分。我不知道为什么它找不到/login/default.tt。我猜它的问题是它不知道我的视图文件夹在哪里,因为有问题的模板在views/login/default.tt. 即使在plackup. 我难住了。