Parklife 是一个 Ruby 库,用于将 Rack 应用程序(Rails/Sinatra/etc)渲染到静态站点,以便由 Netlify、Now、GitHub Pages、S3 或其他静态服务器提供服务。
将 Parklife 添加到应用程序的 Gemfile 并运行捆绑安装。
gem 'parklife'
现在生成 Parkfile 配置文件和构建脚本。通过传递--rails
或--sinatra
包含一些特定于 Rails 或 Sinatra 的设置,创建 GitHub Actions 工作流程来生成 Parklife 构建,并通过传递--github-pages
将其推送到 GitHub Pages。
$ bundle exec parklife init
Parklife 在项目的根目录中配置了一个名为Parkfile
的文件,下面是一个虚构的 Rails 应用程序的Parkfile
示例:
# Load Parklife's Rails-specific integration which, among other things, allows
# you to use URL helpers within the `routes` block below.
require 'parklife/rails'
# Load the Rails application, this gives you full access to the application's
# environment from this file - using models for example.
require_relative 'config/environment'
Parkfile . application . routes do
# Start from the homepage and crawl all links.
root crawl : true
# Some extra paths that aren't discovered while crawling.
get feed_path ( format : :atom )
get sitemap_path ( format : :xml )
# A couple more hidden pages.
get easter_egg_path , crawl : true
# Services typically allow a custom 404 page.
get '404.html'
end
列出上述 Parklife 应用程序中包含的路线以及parklife routes
将输出以下内容:
$ bundle exec parklife routes
/ crawl=true
/feed.atom
/sitemap.xml
/easter_egg crawl=true
/404.html
现在您可以运行parklife build
,它将获取所有路线并将它们保存到build
目录中,准备用作静态站点。检查构建目录可能如下所示:
$ find build -type f
build/404.html
build/about/index.html
build/blog/index.html
build/blog/2019/03/07/developers-developers-developers/index.html
build/blog/2019/04/21/modern-life-is-rubbish/index.html
build/blog/2019/05/15/introducing-parklife/index.html
build/easter_egg/index.html
build/easter_egg/surprise/index.html
build/index.html
build/location/index.html
build/feed.atom
build/sitemap.xml
Parklife 不了解资产(图像、CSS 等),因此您可能还需要生成这些资产并将它们复制到构建目录,请参阅 Rails 示例的完整构建脚本以了解如何执行此操作。
查看此存储库中的 Rails、Rack 和 Sinatra 工作示例。
有时您需要指向链接的完整 URL - 可能是供稿或社交标签 URL。您可以通过设置其base
来告诉 Parklife 使用特定协议/主机发出模拟请求,以便 Rails *_url
帮助程序将指向正确的主机:
Parklife . application . config . base = 'https://foo.example.com'
基本 URL 也可以在构建时传递,这将覆盖 Parkfile 设置:
$ bundle exec parklife build --base https://benpickles.github.io/parklife
index.html
)默认情况下,Parklife 将文件存储在嵌套在与路径同名的目录中的index.html
文件中 - 因此路线/my/nested/route
存储在/my/nested/route/index.html
中。这是为了确保应用程序内的链接无需修改即可工作,从而使任何静态服务器更容易托管构建。
但是,可以关闭此功能,以便/my/nested/route
存储在/my/nested/route.html
中。这允许您通过使用 GitHub Pages 或 Netlify 的漂亮 URL 功能或某些自定义 nginx 配置来提供尾部无斜杠 URL。
Parklife . application . config . nested_index = false
构建目录不应该存在,并且在每次构建之前被销毁并重新创建。默认build
.
Parklife . application . config . build_dir = 'my/build/dir'
默认情况下,如果 Parklife 在获取路线时遇到 404 响应,它将引发异常( :error
设置)并停止构建。其他值是:
:warn
- 向stderr
输出一条消息,保存响应,然后继续处理。:skip
- 默默地忽略并且不保存响应,并继续处理。 Parklife . application . config . on_404 = :warn
如果您不使用 Rails 配置,则需要自己定义它,请参阅示例。
Parklife . application . config . app
该 gem 根据 MIT 许可证条款作为开源提供。
在 Parklife 项目的代码库、问题跟踪器、聊天室和邮件列表中进行交互的每个人都应遵守行为准则。