16

我需要一种简单的方法来生成静态网页,以便我可以使用 Apache 或 Nginx 为它们提供服务。目前我正在使用 SproutCore 的构建工具 (Abbot) 来生成静态页面,但这有点麻烦,因为它是为构建 SproutCore 应用程序而不是非 SproutCore HTML 页面而设计的。

以下是我的要求:

  • Javascript 必须合并和缩小
  • CSS 文件必须合并
  • 每个图像 / CSS / Javascript 资产必须有唯一的 URL 以便更好地缓存(查询字符串是不够的)
  • 资产 URL 只有在真正发生变化时才应该有所不同
  • 本地化支持全面的 HTML、CSS、Javascript 和图像文件
  • 不错的模板引擎,带有布局、部分等。

以下是我找到的可能的解决方案:

对此有什么想法吗?

经过漫长的评估过程,我决定使用 Middleman。它可以解决问题,我喜欢它的简单性以及我可以使用现有的 Rack 组件的事实。

最好的祝福,

佩卡·马蒂拉

4

6 回答 6

17

我是 Middleman 的创建者,我很乐意帮助您熟悉使用 Middleman。我的主要目标是为用户提供 Rails 的强大功能,但专注于静态开发。Middleman 的一些实际代码是 Ab 的简化版本

于 2011-08-21T05:55:36.490 回答
1

这就是我所做的:

  • 带有High Voltage Gem的 Ruby on Rails 3 ,这使得使用通用模板提供静态页面正文变​​得容易。它需要在路由中有一个简单的条目(您可以使用命名空间来创建层次结构)。

  • Apache 反向代理到独立的Passenger(我相信它使用nginx)来运行Rails 应用程序。本文介绍如何配置它。

独立乘客将读取 URL,查看 /public 中是否存在带有 .html 的相应文件,然后提供该文件。如果没有找到,它将调用 Rails 并生成页面。本质上,页面缓存,可以选择发布带有或不带有 .html 的 URL。乘客文档中有一节专门关于页面缓存。

至于组合和缩小 js 和 css,这里有一个很好的 stackoverflow 线程

Rails 具有出色的 i18n/l10n 支持。

Rails 模板引擎非常好用。如果您愿意,可以使用 HAML。

对于您的第 3 点和第 4 点,我有点困惑。您希望将 css 和 js 结合起来,但是您希望每个都有自己的 URL。在 Rails 中,资产标签上的“cache => true”指令负责添加一个查询字符串参数,该参数会随着内容的变化而改变,这是一个相当传统的方案。我不确定你在什么环境下工作是行不通的。我曾经使用过的任何 CDN 都可以正常工作,正确实现 HTTP 规范的 Web 服务器也是如此。无论如何,更改 URL 中的实际路径或文件将需要更改对它的所有引用。也许我是误会了?

于 2011-08-21T15:07:58.337 回答
1

Monkeyman有你需要的模板引擎,我想。把它想象成 Middleman 的小 Scala 兄弟。还没有成熟或功能丰富的地方,但我们最终会到达那里。当前版本支持用于布局的 HAML、Jade、SSP、用于内容的 Markdown 和其他一些东西。

于 2012-02-13T20:43:00.073 回答
1

无特殊要求

于 2013-05-14T14:23:05.073 回答
0

您可能还应该检查mod_pagespeed。它至少会给你这个:

  • Javascript 必须合并和缩小
  • CSS 文件必须合并
  • 每个图像 / CSS / Javascript 资产必须有唯一的 URL 以便更好地缓存(查询字符串是不够的)
  • 资产 URL 只有在真正发生变化时才应该有所不同

它不会给你这个:

  • 本地化支持全面的 HTML、CSS、Javascript 和图像文件
  • 不错的模板引擎,带有布局、部分等。
于 2012-02-13T20:40:07.967 回答
0

你可以看看docpad。它用 coffeescript 编写并在Nodejs运行。它是基于文档的,您在其中编写一些文档和布局,它将编译它们并将它们写入 out 目录。您可以通过插件以多种语言编写文档

它还支持多级文件编译。例如从ecomarkdownhtml

它的另一个重要功能是您可以查询文档中正在生成的其他文档。例如在第一页,你有这样的东西来获取所有的博客文章:

database.findAll({url : /posts/})

这将返回所有在其 url 中有帖子的文档。

于 2012-05-07T12:00:58.173 回答