加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – 为什么是Test :: WWW :: Mechanize :: PSGI使用端口?

发布时间:2020-12-15 22:01:45 所属栏目:大数据 来源:网络整理
导读:我有一些代码看起来像这样: use SomeApp;use Test::WWW::Mechanize::PSGI; my $mech = Test::WWW::Mechanize::PSGI-new( app = sub { SomeApp-run(@_) },);$mech-get_ok('/'); 但是,一旦get_ok()被调用,我得到以下警告: PSGI error: failed to listen to p
我有一些代码看起来像这样:
use SomeApp;
use Test::WWW::Mechanize::PSGI;                                                                                                                                         
my $mech = Test::WWW::Mechanize::PSGI->new(
    app  => sub { SomeApp->run(@_) },);
$mech->get_ok('/');

但是,一旦get_ok()被调用,我得到以下警告:

PSGI error: failed to listen to port 8080: Address already in use at .../5.18.1/HTTP/Server/PSGI.pm line 94.
HTTP::Server::PSGI::setup_listener('HTTP::Server::PSGI=HASH(0x7fe6622fad60)') called at .../5.18.1/HTTP/Server/PSGI.pm line 54

是的,我正在使用该端口的其他东西.从the docs of Test::WWW::Mechanize::PSGI:

This module allows you to test PSGI web applications but does not require a server or issue HTTP requests. Instead,it passes the HTTP request object directly to PSGI.

所以在理论上,我不需要指定一个端口,但是我得到上面的警告和提取的页面返回一个500(他们在浏览器中工作正常).我失踪了什么

> Test :: WWW :: Mechanize :: PSGI版本0.35
> Plack版本1.0030
> Catalyst版本5.90051

更改MyApp->运行到MyApp-> psgi_app结果如下:

Can't call method "request" on an undefined value at .../5.18.1/Test/WWW/Mechanize/PSGI.pm line 47.

可以复制此错误:

catalyst.pl MyApp
cd MyApp
# run the test program above

解决方法

Catalyst的运行方法实际上会运行HTTP服务器(通过Plack / PSGI!)进行开发,而不是通过PSGI(不运行服务器)进行测试.您需要:app => MyApp-> psgi_app,没有额外的子块,因为psgi_app应该返回PSGI应用程序本身.

当您的应用程序返回不符合PSGI规范的内容时,错误消息“Can not call method”request’on …“是常见错误.消息已经在git主机上有所改进,但它本质上是一个用户错误,因为您只需要$app就返回sub {$app}.

有关使用Catalyst的PSGI支持的更多文档可以使用perldoc Catalyst :: PSGI.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读