从动态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:查看网站
看起来相当不错!
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上。
标签
反馈
这篇文章有什么问题吗?请通过在GitHub上打开问题或拉取请求来帮助我们。