19

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

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

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

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

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

4

3 回答 3

26

忘记 Apache 位。这是一种编写应用程序的方式,因此网络服务器的选择变得不那么相关了。在 $work 我们发现我们的应用程序在升级到 Apache2 后以非常高的 CPU 负载运行后切换到 Plack/PSGI - 对各种 Apache 配置和 NYTProf'ing 进行基准测试无法确定原因,并且使用 PSGI 和 Starman 网络服务器工作得更好为了我们。

现在一切都由我们的 PSGI 应用程序(URL 重写、静态内容、过期标头等)而不是 Apache 配置在一个地方处理,因此它是 a) Perl,b) 通过我们的标准 /t/ 脚本轻松测试。此外,我们的测试现在正在准确测试用户所看到的内容,而不仅仅是基本应用程序本身。

如果您对 Apache 和 mod_perl 感到满意,这可能与您无关,而且我相信其他人将能够给出更好的答案,但对我们来说不必再处理任何与 Apache 相关的事情是一种解脱在自身。测试的简便性,以及只需插入 Data::Dumper 并查看发生了什么而不是与 ModRewrite 和朋友搏斗的能力,是一个巨大的福音。

于 2011-05-26T08:32:08.163 回答
17

借用 chromatic 最近的一篇博文,Why PSGI/Plack Matters (Testing),它是这样的:

这是一个从 Python 的 WSGI 和 Ruby 的 Rack 借来的好主意,但是却变成了 Perlish;它是 Web 应用程序开发模式的简单形式化,其中应用程序的入口点是函数引用,出口点是标头信息和响应正文的元组。

就是这样。这是尽可能简单的方法,而且这种简单性欺骗了很多想要学习它的人。

一个重要的好处是,同上。,

给定一个 Plack 应用程序,您不必部署到 Web 服务器(甚至是本地)来测试您的应用程序,就好像它已部署一样...... Plack 和TWMP(和Plack::Test)使用定义明确的 Plack 模式来制作这以前很难变成非常容易的事情。他们不是第一个,也不会是最后一个,但他们确实展示了 Plack 的价值。

于 2011-05-26T11:56:27.447 回答
8

开始写了一个答案,50行后我删除了它。仅仅因为不可能告诉(简而言之)为什么 PSGI 非常酷。我也是 PSGI 的新手,但是在我的 apache/mod_perl 时代,现在 zilion 的事情比以前容易多了。

我可以给你下一个建议:

  1. 阅读Plack 降临日历- 所有日子,一步一步。你必须了解基本的哲学,洋葱有什么好处等等...... :)
  2. 在 CPAN 中搜索“Plack::Middleware::” - 并阅读每行的前几行。这里有很多。(真的应该在某个地方为每个人提供一些简短的概述,不幸的是不知道更快的方法。很高兴知道已经开发了哪些中间件。(例如,您肯定需要 Plack::Middleware::Session , 或 Plack::Middleware::Static 等等...)
  3. 阅读有关 Plack::Builder 的信息(已经完成,当您完成降临日历时):)
  4. 尝试用它编写一些应用程序,会发现比 Plack 更像是第一次性行为 - 现在你不明白没有它你可以生活。

ps:如果这里有“Perl Oscar”之类的东西,肯定会提名 MyiagavaSan。:)

于 2011-05-26T13:40:17.027 回答