Perl/Raku简洁的Web服务器一行代码?

7
如果没有 index.html,是否有一行简洁的代码可以快速提供页面或目录呢?类似于这样的代码:
python3 -m http.server

找不到一个Raku的一行代码。
与从https://gist.github.com/willurd/5720255https://github.com/imgarylai/awesome-webservers获取的Perl进行比较:

plackup -MPlack::App::Directory -e 'Plack::App::Directory->new(root=>".");' -p 8000

perl -MHTTP::Server::Brick -e '$s=HTTP::Server::Brick->new(port=>8000); $s->mount("/"=>{path=>"."}); $s->start'

在使用之前安装它们(Python不需要额外的安装):

cpan Plack
cpan HTTP::Server::Brick

Plack 涉及众多依赖,因此我没有继续安装它,而 HTTP::Server::Brick 由于测试失败无法在我的机器上安装。

PerlRaku 通常被认为是一行代码好用的语言,并且旨在提供 DWIM (根据上下文尝试做正确的事情):“尝试根据上下文做正确的事情”“猜测…当提供虚假输入时预期的结果”

因此,我希望它们 - 特别是现代和丰富的 Raku - 能够提供与 Python 同样简单的一行代码 web 服务器。
或者我漏掉了什么?
如果缺少此功能,是否有计划实现?
如果缺少并且不打算实现,为什么?


我记得的Perl6/Raku模块是Bailador https://github.com/Bailador/Bailador。还有一本书在https://leanpub.com/上。 - jubilatious1
1
@jubilatious1 Bailador似乎是用于构建应用程序的目的,而不是用于临时服务目录的。 - uxer
3个回答

7

Raku Cro 只需要一行命令进行安装:

zef install --/test cro

然后再输入以下一行来进行设置和运行:

cro stub http hello hello && cro run

来自 https://cro.services/docs/intro/getstarted

假设您想要在项目子目录中提供所有文件,例如 hello/httpd,则将标准的hello/lib/Routes.pm6文件调整为:

  1 use Cro::HTTP::Router;
  2 
  3 sub routes() is export {
  4     route {
  5         get -> *@path {
  6             static 'httpd', @path;
  7         }
  8     }
  9 }

cro run 监听文件变化并自动重启服务器

index.html 运行正常

如果你的文件目录在项目树之外,建议使用符号链接 ln -s


嗨@uxer - 虽然Cro不是唯一的选择,但它(接近)实现了你所要求的功能(安装模块只需一行代码,设置和运行也只需要一行)- 我很好奇为什么你不接受这个作为答案...? - librasteve
2
好的我认输了,这是一行代码:raku -e 'shell("zef install --/test cro && cro stub http hello hello && cro run")' ;-) - librasteve
为什么不把这个作为答案接受呢:1.该命令在使用情况上比较复杂,不容易记忆;2.它会创建自己的目录hello并在其中放置文件;3.它不会显示目录内容,否则需要编码;4.localhost绑定-从另一台机器上出现ERR_CONNECTION_REFUSED错误;5.cro stub ...无法在/tmp~中启动-出现“无法获取...权限被拒绝”的错误;6.在antiX 19上需要安装libssl-dev,而在OpenBSD 7.1上根本无法安装。https://github.com/bduggan/p6-digest-sha1-native/issues/18 - uxer
1
@uxer 感谢反馈... - librasteve

7

我喜欢 http_this(也有https_this)。

它目前存在一个烦人的缺陷,即不支持index.html - 但是我有一个拉取请求等待修复。

另一方面,这些程序依赖于Plack,因此您可能想寻找其他解决方案。


1
顺便提一下,还有以下几个: ftp_this, cgi_this, dav_this 以及一个包含所有这些的总称:Task::FooThis - uxer

3
除了您问题中的Web服务器部分,Python和Perl在哲学上存在差异。它们都是完成任务的良好方式,并且各自吸引不同类型的人群。
Python是“电池包含”,因此它是一个重量级的标准库,其中包含许多内容。即使您从未使用其中大部分功能,也可以立即使用更多功能。
Perl尝试仅分发足够的内容供您安装所需的模块。这样,您可以选择比Perl选择分发的版本更新或者较新的版本。
现在,对于Web服务器,您可能会喜欢Mojolicious。它基本上是自包含的(或依赖于核心模块),因此安装更加容易。您提到的链接有Mojolicious::Lite示例。

我提到的第一个链接指出 Mojolicious::Lite 不会提供目录内容,确实如此:https://dev59.com/0r3pa4cB1Zd3GeqPgpDY - 因此为了寻求全面的解决方案,我省略了该模块。 - uxer
有适用于那种事情的插件。 - brian d foy
为了完整起见,您是否可以添加Raku进行三方比较。 Raku在语言本身方面也更加“开箱即用”,重量级的“电池内置”。关于库分发的政策是什么?你自己来填充吗?例如,有Rakudo Star Bundle,提供HTTP :: Easy,似乎不需要一行代码就能实现。可惜啊。 - uxer
有适用于那种事情的插件。这个一行代码会变得更加简洁…… - uxer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接