名称

Mojolicious::Guides::FAQ-常见问题

概述

本文档包含以下最常见问题的答案:莫乔利奇.

问题

我们希望这些答案能令您满意。

Mojolicious与其他Perl web框架相比如何?

简短的回答是“它没有”,因为我们对“web框架”一词的解释比其他人更严格。随着实时网络和WebSockets等新技术的出现,我们面临着新的挑战,这些挑战远远超出了常用的模块,如LWP公司是为设计的。正因为如此,莫乔利奇包含一个名为莫霍它深受LWPng最初工作的启发,并根据这些新要求精心设计。因此,虽然一些高级抽象层看起来可能与其他web框架类似,但它更像是一个web工具包,甚至可以用作更高级web框架的基础。

为什么Mojolicious没有任何依赖性?

我们正在优化莫乔利奇为了用户友好性和开发速度,没有任何妥协。虽然中没有规则Mojolicious::指南::贡献为了禁止依赖关系,我们目前不鼓励添加非可选的依赖关系,而支持更快、更轻松的安装过程。事实上,我们已经使用了几个可选的CPAN模块,例如面板::JSON::XS,电动汽车,IO::插槽::插槽,IO::套接字::SSL,网络::DNS::本机,普拉克角色::Tiny尽可能提供高级功能。

为什么要重新发明轮子?

因为我们可以使它们更圆。专门为用户友好性和开发速度设计的组件并不容易获得。我们坚信Perl的口头禅“有不止一种方法”,我们的追求是为这两个标准开发最佳的解决方案。

向后兼容性如何?

符合Mojolicious::指南::贡献,在主要版本之间以不兼容的方式删除或更改某个功能之前,我们总是会在3个月内弃用该功能。然而,可以将新特性标记为实验性特性,以明确地将它们排除在这些规则之外。这给了我们必要的自由,以确保莫乔利奇因此,只要您没有使用任何标记为实验性、未测试或未记录的内容,您就可以始终依赖向后兼容性,其他所有内容都将被视为错误。然而,为了完全避免任何意外损坏的风险,我们建议遵循当前版本固定的最佳实践纸箱用于生产设置。

为什么不将Mojolicious拆分为许多较小的发行版?

由于没有任何优势,它大大增加了维护成本和安装时间,而没有给我们任何回报。只有当我们希望将模块的所有权传递给新的维护者时,这才有意义,而我们过去已经这样做了。

我在哪里可以讨论Mojolicious的补丁?

我们很乐意讨论您对莫乔利奇矩阵IRC公司.

Mojolicious支持哪些版本的Perl?

首先,您需要知道,根据珀尔政策社区只支持最新的两个稳定的Perl发行版系列,并收到了错误修复,目前是5.32.x和5.30.x。莫乔利奇遵循此模型并完全支持这两个发布系列。此外,我们还将保持发行版的可安装性(这意味着通过所有测试),直到核心团队认为值得支持的某个遗留版本,但没有对其进行专门优化,目前是5.16.0。

Mojolicious对Windows的支持程度如何?

Windows不受官方支持莫乔利奇,尽管我们试图保持发行版的可安装性。可能存在严重的安全和/或可靠性问题。一些更高级的功能,例如子流程催眠药web服务器,还需要使用用于Linux的Windows子系统.

Mojolicious支持Perl的污染模式吗?

不。使用污点模式毫无益处。现代Perl应用程序过于复杂,无法以任何有意义的方式从这种天真的机制中获益。这最多会给你一种虚假的安全感。

在测试Mojolicious之前,我需要清洁我的环境吗?

莫乔利奇在内部和外部都使用许多环境变量,特别是(但不限于)那些以前缀开头的环境变量MOJO公司_*播放_ENV测试套件需要干净的环境;不支持使用非标准环境进行测试,因此不太可能成功。因此,在安装或升级时莫乔利奇在运行测试时,我们强烈建议使用不设置这些变量的环境。

我的文件扩展名去了哪里?

标准路线占位符与.然而,字符莫乔利奇路由自动采用文件扩展名,如.html格式,删除前导.,并将结果存储在格式隐藏价值。这对于基于URL的内容协商很有用,例如根据文件扩展名自动呈现不同的模板。请参见Mojolicious::Guides::Routing中的“格式”有关自定义格式检测的信息,或考虑使用放松的占位符以允许匹配.字符。

我可以从命令行配置催眠器吗?

不,你不能,催眠药在这方面有点特别。因为当您启动零停机软件升级(热部署)时,您实际上只是发送一个2美元向已经运行的服务器发送信号,并且不能传递其他信息。相反,您可以使用Mojolicious::插件::配置,Mojolicious::插件::JSONConfigMojolicious::插件::NotYAMLConfig配置文件。

#我的应用程序配置文件{催眠蟾蜍=>{listen=>['http://*:8080'],工人=>10}};

或者,如果您实际上不需要零停机软件升级,只需使用Mojolicious::命令::prefork相反,这在其他方面几乎与催眠药相同。

$ ./myapp.pl prefork-m production-l http://*:8080-w 10

错误“…证书验证失败”是什么意思?

此错误有很多变体,但其中大多数都意味着TLS证书验证Mojo::用户代理失败。这种情况通常有两个原因。最常见的是对等证书完全无效。如果是这种情况,并且您确定没有尝试MITM攻击,则可以使用属性Mojo::UserAgent中的“不安全”MOJO_保险禁用证书验证的环境变量。如果不是这样的话,你可能会错过Mozilla::CA模块,通常需要IO::套接字::SSL以便能够验证证书。

“超过最大消息大小”错误是什么意思?

为了保护应用程序免受过大的请求和响应,我们的HTTP解析器有一个上限,在这个上限之后,它将自动停止接受新数据,并且在大多数情况下会强制关闭连接。默认情况下,请求的限制为16MiB,响应的限制为2GiB。您可以使用属性Mojolicious中的“max_request_size”Mojo::UserAgent中的“max_response_size”更改这些值。

“超过最大起始线大小”错误是什么意思?

这是一种与前面答案中描述的保护机制非常相似的机制,但更具体一些。它限制了HTTP请求和响应的起始线的最大长度。默认限制为8KiB,您可以使用属性Mojo::Message中的“max_line_size”MOJO_MAX_LINE_SIZE(莫约_最大_线条_尺寸)环境变量来更改此值。

“超过最大页眉大小”错误是什么意思?

与前面的答案几乎相同,但此保护机制限制了HTTP请求和响应标头的数量和最大长度。默认限制为100个标头,每个标头8KiB,您可以使用属性Mojo::Headers中的“max_lines”Mojo::Headers中的“max_line_size”MOJO_MAX_线MOJO_MAX_LINE_SIZE(莫约_最大_线条_尺寸)环境变量来更改这些值。

“超过最大缓冲区大小”错误是什么意思?

这种保护机制限制了HTTP解析器在解析分块、压缩和多部分消息时允许缓冲的内容量。默认限制约为256KiB,您可以使用属性Mojo::Content中的“max_buffer_size”MOJO_MAX_BUFFER尺寸环境变量来更改此值。

“您的密码短语需要更改”是什么意思?

莫乔利奇对安全功能(如签名的cookie)使用秘密密码。默认使用Mojolicious中的“绰号”,这不是很安全,所以我们添加了此日志消息作为提醒。您可以使用属性更改密码短语Mojolicious中的“秘密”。由于一些插件也依赖于它,您应该尝试在应用程序中尽早更改它。

$app->secrets([‘我的秘密密码。’]);

“什么都没做,期待延迟响应”是什么意思?

莫乔利奇已从头开始为非阻塞I/O和事件循环设计。因此,当一个新的请求传入而没有立即生成响应时,它会认为这是故意的,并将控制权返回给web服务器,然后web服务器可以处理其他请求,同时等待计时器等事件最终生成响应。

“非活动超时”是什么意思?

为了保护应用程序免受拒绝服务攻击,所有连接都有一个非活动超时,这限制了连接在自动关闭之前处于非活动状态的时间。默认为40用户代理和30所有内置web服务器的秒数,可以使用属性进行更改Mojo::UserAgent中的“activity_timeout”Mojo::Server::Daemon中的“activity_timeout”MOJO_INACTIVITY超时环境变量。莫乔利奇也可以使用帮助器的应用程序Mojolicious::Plugin::DefaultHelpers中的“activity_timeout”根据需要分别对每个连接进行更改。此超时总是适用的,因此您可能必须对处理请求需要很长时间的应用程序进行调整。

“过早关闭连接”是什么意思?

此错误消息通常与上面的消息有关,这意味着web服务器在用户代理可以接收到整个响应之前关闭了连接,或者用户代理已被破坏,这将强制立即关闭所有连接。

#变量$ua超出范围并过早销毁Mojo::IOLoop->计时器(5=>sub{my$ua=Mojo::UserAgent->new;$ua->get('https://mojolicious.org'=>子($ua,$tx){说$tx->result->dom->at('title')->text;});});

“工人31842没有心跳(50秒),重启”是什么意思?

只要它们接受新的连接,所有内置预分叉web服务器的工作进程都会定期向管理器进程发送心跳消息,以表明它们仍在响应。应用程序中的阻塞操作(如无限循环)可以防止这种情况发生,并将强制受影响的工作线程在超时后重新启动。此超时默认为50秒,可以使用属性进行扩展Mojo::Server::Prefork中的“heartbeat_timeout”如果您的应用程序需要它。

“交易已销毁”是什么意思?

此错误消息通常在长时间等待非阻塞操作的结果后出现,因为在此期间基础连接已关闭,并且属性的值Mojolicious::Controller中的“tx”不再可用。虽然可能无法阻止连接关闭,但您可以通过保留对未减弱的事务对象的引用来避免此错误消息。

#保持对事务对象的强引用我的$tx=$c->render_later->tx;$c->ua->get_p('https://mojolicious.org')->然后(sub{$c->render(text=>“访问mojolicious.org”);})->catch(子($err){$tx;$c->reply->异常($err);});

“原型中的非法字符”是什么意思?

Mojolicus假设子程序签名在文档示例中启用。如果在该范围内未启用签名功能,则将其解释为原型,一个无关的解析器功能。Mojolicious不需要签名;如果您不想或不能使用签名(需要Perl 5.20+),可以将大多数签名转换为标准的子例程参数赋值。

#具有签名功能获取'/title'=>sub($c){$c->ua->get('mojolicious.org'=>sub($ua,$tx){$c->render(数据=>$tx->result->dom->at('title')->文本);});};#无签名功能获取'/title'=>sub{我的($c)=@_;$c->ua->get('mojolicious.org'=>sub{my($ua,$tx)=@_;$c->render(数据=>$tx->result->dom->at('title')->文本);});};

更多

您可以继续Mojolicious::指南现在或者看看Mojolicious维基,其中包含许多不同作者编写的更多文档和示例。

支持

如果您有任何文档可能尚未回答的问题,请毫不犹豫地在论坛,上的IRC公司,或矩阵.