我正试图Plack::App::CGIBin在FreeBSD 8.2上使用Apache2和FastCGI.最终的目标是能够使用这个设置通过Plack服务一大堆遗留的CGI脚本,以便利用其中间件功能,但我甚至无法得到一个简单的例子.
我已经按照关于Plack :: Handler :: FCGI和Plack :: App :: CGIBin本身的CPAN文档,但我不确定我是否遗漏了某些内容或做错了哪些文档没有涵盖.
这是我添加的Apache配置:
# Set up external server
FastCgiExternalServer /tmp/placktest.fcgi -socket /tmp/fcgi.socket
# URL to be handled by FastCGI
Alias /plack/ /tmp/placktest.fcgi/
Run Code Online (Sandbox Code Playgroud)
运行外部服务器的命令:
plackup -s FCGI --listen /tmp/fcgi.socket /data/www/psgi/app.psgi
Run Code Online (Sandbox Code Playgroud)
服务器成功启动,返回以下内容:
FastCGI: manager (pid <pid>): initialized
FastCGI: manager (pid <pid>): server (pid <pid>) started
FastCGI: server (pid <pid>): initialized
Run Code Online (Sandbox Code Playgroud)
这是app.psgi:
#!/usr/bin/env plackup -s FCGI
use Plack::App::CGIBin;
use Plack::Builder;
my $app = Plack::App::CGIBin->new(
root => '/data/www/plack',
)->to_app; …Run Code Online (Sandbox Code Playgroud) 我已经做了一段时间的网络编程,并且对LAMP堆栈非常熟悉.我决定尝试玩弄nginx的/接龙/舞者堆栈和我有点困惑如何理解,从一个高层次,所有的部分是如何相互关联的.设置堆栈似乎并不像设置LAMP堆栈那样简单,但这可能是因为我并不真正了解这些部分是如何相关的.
我理解nginx正在扮演的角色 - 一个轻量级的网络服务器/代理 - 但我对starman与pgsi,plack和舞者的关系感到困惑.
我将非常感谢这些部分如何相互关联以及为什么每个部分都需要(或不必要)来获得堆栈设置的高级细分.谢谢!
我正在尝试使用Plack/Starman部署我的小型Catalyst Web应用程序.所有文档似乎都表明我想将它与nginx结合使用.这有什么好处?为什么不直接在Star 80上使用Starman?
重新提出问题,因为
评论:这个问题已经获得了"流行的问题徽章",所以可能我不是唯一没有希望的人.:)
不幸的是,展示完整的问题堆栈导致了一个非常长的问题,这是非常梅森特定的.
首先,只有意见的部分:)
我使用HTML :: Mason多年,现在尝试使用Mason2.在诗人和梅森 都在CPAN最先进的框架.没有找到任何比较,开箱即用的东西允许写得如此干净/但非常黑客:)/ web-apps,包括许多电池(记录,缓存,配置管理,基于原生PGSI等......)
不幸的是,作者并不关心其余部分,例如默认情况下,它只是基于ascii, 没有任何手册,常见问题或建议:如何使用unicode
现在的事实.演示.创建一个诗人应用程序:
poet new my #the "my" directory is the $poet_root
mkdir -p my/comps/xls
cd my/comps/xls
Run Code Online (Sandbox Code Playgroud)
并添加到dhandler.mc下面(将说明两个基本问题)
<%class>
has 'dwl';
use Excel::Writer::XLSX;
</%class>
<%init>
my $file = $m->path_info;
$file =~ s/[^\w\.]//g;
my $cell = lc join ' ', "ÅNGSTRÖM", "in the", $file;
if( $.dwl ) …Run Code Online (Sandbox Code Playgroud) 我正在学习现代perl - Moose,Plack等.在很多建议中你可以阅读"通过实例学习" - 所以开始搜索一些用Modern perl编写的可立即运行的应用程序.
浏览了很多页面:
还有更多(perl.org等) - 不幸的是 - 我找不到任何用现代perl编写的"准备运行"应用程序.
我没有找到任何Moose/Plack - CMS,既没有ShoppingCart,也没有Blog或任何Web应用程序.很难相信它们不存在,所以我可能在错误的地方寻找.
请问您能指出一些用Modern Perl(不仅仅是框架)编写的"Ready to run"Web应用程序吗?我检查了上面链接中的所有应用程序,没有人是Moose/Plack.
基于催化剂:
其他Moose/Plack应用:
如今,运行Perl Web应用程序的一个非常流行的选择似乎是nginx webserver代理对FastCGI守护程序或PSGI启用的Web服务器(例如Starman)的请求.
关于为什么一般会这样做会有很多问题(例如为什么在Catalyst/Plack/Starman中使用nginx?)并且答案似乎适用于这两种情况(例如,允许nginx提供静态内容,轻松重启应用程序服务器,负载均衡等)
但是,我对使用FastCGI与反向代理方法的优缺点特别感兴趣.似乎Starman被广泛认为是最快和最好的Perl PSGI应用程序/网络服务器,我很难看到使用FastCGI的任何优势.这两种方法似乎都支持:
同样,任一选项的nginx配置都非常相似.
那你为什么选择一个呢?
是否建议使用perl的污点模式开发Plack应用程序(中间件)?
如果是,如何在受污染的模式下启动plackup和/或Starman?在简单的CGI脚本中,很容易用shebang线完成.
会perl -T /path/to/{plackup|starman}做这个工作吗?或者这是推荐的方式吗?或者不推荐?
关于组合Plack + Taint模式的任何想法,指针,文章?
我使用以下方式启动了Dancer/Starman服务器:
sudo plackup -s Starman -p 5001 -E deployment --workers=10 -a mywebapp/bin/app.pl
但我不确定如何停止服务器.有人能给我一个快速的方法来阻止它以及它产生的所有工人吗?
该普拉克::生成器允许挂接多个主机,例如一些如下面的代码片段:
my @sites = load_site_names();
my $apps;
for my $site (@sites) {
$apps->{$site} = Some::PsgiFramework::MyApp->new( config => get_config($site) );
}
use Plack::Builder;
builder {
for my $site (@sites) {
mount "$site" => $apps->{$site};
}
mount '/' => sub { ... };
}
Run Code Online (Sandbox Code Playgroud)
例如
load_site_names返回站点的列表一样http://example.com,http://some.other.site.com...Some::PsgiFramework::MyApp我完全需要以上内容 - 需要开发一个简单的网络应用程序,该应用程序应该部署在不同(低流量)站点的数据库中,并且不希望为每个站点设置不同的PSGI服务器.
然而,Plack本身的作者说(在Plack :: Request中)
请注意,此模块旨在供Plack中间件开发人员和Web应用程序框架开发人员而非应用程序开发人员(最终用户)使用.
使用Plack :: Request直接编写Web应用程序当然是可行的,但不推荐:它就像使用mod_perl的Apache :: Request那样:但是程度太低.
如果您正在编写Web应用程序而不是框架,那么建议您使用一个支持PSGI的Web应用程序框架(http://plackperl.org/#frameworks),或者查看HTTP :: Engine等模块在PSGI之上提供更高级别的请求和响应API.
这就是问题所在.
我在MetaCPAN中检查了许多不同的基于PSGI的框架.并且AFAIK每个都是基于单一的,例如,不允许写入应用程序可以多次共享(安装)同一个不同的站点app.psgi. …
我需要构建一个简单的Web应用程序.我决定用Poet(Mason2)来做,它使用Plack.
应该允许应用程序仅由经过身份验证的用户使用,因此我需要构建一些登录/密码功能.
已经有一个Plack模块Plack :: Middleware :: Auth :: Basic允许使用Basic用户auth,可以设置检查.htpasswd或类似.但基本身份验证不是很安全; 任何人都可以通过数据包捕获等方式获取登录密码.
以下是两种可能的解决方案
问题:
app.psgiHTTPS.我需要稍微修改一下我的应用程序吗?什么链接显示我如何运行plackuphttps?那么,使用Plack应用程序实现安全身份验证的相对简单方法是什么?
PS:我不关心其余的沟通.我只需要不允许获取密码的安全身份验证.
PPS:https很容易使用apache(和自签名)证书.但我不知道如何使用它plackup(以及任何其他基于Plack的服务器)