从动态Perl Web应用程序生成静态网站

静态网站并不适合所有情况,但它们在动态应用程序上具有几个优势;它们更高效、更安全且更容易部署。尽管如此,开发和维护静态网站是一件痛苦的事情,因为代码重复太多。现在,有了Wallflower,它可以从PSGI兼容的Perl Web应用程序生成静态网站。您可以得到两者的最佳组合:在您喜欢的Web框架中开发路由、模板和单元测试,但使用Wallflower将其部署为静态网站。

需求

App::Wallflower最新版本(v1.004)的CPAN测试者结果显示,它几乎可以在任何Perl和操作系统上运行,包括Windows。您可以通过命令行输入以下命令从CPAN安装它:

$ cpan App::Wallflower

Wallflower的实际应用

让我们使用Dancer2创建一个简单的应用程序

$ dancer2 -a MyApp

这将为我们创建一个基本的应用程序。现在,切换到应用程序的根目录,创建一个新的目录来存储静态文件,我们将其命名为“static”

$ cd MyApp
$ mkdir static

这就是我们使用wallflower生成静态网站所需的所有内容

$ wallflower --a bin/app.pl --d static

Wallflower将请求应用程序的根页面(“/”),并从那里爬取它找到的所有链接,并将文件复制到静态文件夹中。这包括引用您的html和css的文件,如JavaScript文件。如果您的应用程序包含指向其所有页面的链接,那么这就是您需要做的。

使用nginx测试静态网站

让我们将网站在本地上部署nginx(您需要安装nginx才能执行此操作)。首先创建虚拟主机文件

server {
    listen 80;
    server_name localhost;
    root /var/www/MyApp/static;
    location / {
        index index.html;
        rewrite ^/$ /index.html break;
    }
}

假设在类Unix平台上,将虚拟主机文件保存到“/etc/nginx/sites-available/localhost”。然后输入以下命令

$ sudo mkdir /var/www/MyApp
$ sudo cp static /var/www/MyApp
$ cd /etc/nginx/sites-enabled
$ sudo ln -s ../sites-available/localhost

现在我们需要启动nginx。在RHEL/Fedora/CentOS上,您可以使用以下命令启动nginx

$ sudo nginx

在Ubuntu上

sudo service nginx start

现在在http://localhost:查看网站

The default Dancer app - statically deployed

看起来相当不错!

Wallflower技巧

在使用Wallflower时我发现了一些事情

  • 请使用绝对URL而不是相对URL。所以如果您的字体文件存储在CSS目录中,请在CSS文件中使用:“/css/MyFont.ttf”而不是“MyFont.ttf”。
  • 考虑那些在应用程序的HTML页面中未直接链接到的文件,例如sitemap.xml文件。使用-F选项将这些文件的feed URL提供给Wallflower。
  • 注意注释代码中的URL,因为Wallflower也会复制这些内容!
  • Wallflower文档建议在URL中使用扩展名以确保设置正确的内容类型。我发现当我在nginx上部署文件时,这并不是必需的。

结论

无论您更喜欢使用Catalyst、Dancer还是Mojolicious来开发应用程序,Wallflower都是一个有用的工具,可以将其集成到您的开发和部署过程中。有关Wallflower的更多示例,请参阅Wallflower创建者Philippe Bruhat(BooK)的教程日志条目

封面图片 © Ruth Hartnup


这篇文章最初发布在PerlTricks.com上。

标签

David Farrell

David是一位职业程序员,他经常推文博客关于代码和编程的艺术。

浏览他们的文章

反馈

这篇文章有什么问题吗?请通过在GitHub上打开问题或拉取请求来帮助我们。