2013-08-02 35 views
4

我对数据如何在Docpad中持久存在的架构感到困惑。从博客和论坛中,我知道内存中(和/或out目录)用于生成内容。但Docpad的卖点之一是“完全基于文件”。从它的声音来看,将它托管在Heroku或任何短暂的文件系统似乎并不合逻辑。任何人都可以提供一些解释/澄清?Docpad持久性需要说明

+0

您将其托管在Heroku等服务器或其他支持Node.js的其他服务器上的原因是您的网站中存在动态数据。 DocPad可以是完全静态的,另一方面它可以是完全动态的。或者它可以是他们两个。但是,如果您网站上的任何内容都是动态的,或者您需要不时重新生成网站,那么您需要一台支持Node.js的服务器。这是否回答你的问题?如果是的话,我可以把它放在答案中。 :) – greduan

+0

感谢您的答案。我忘了提及文件上传。 Docpad如何在Heroku的临时文件系统中处理它?临时文件系统不会永久写入任何内容。抱歉,我仍然对Docpad网站上的“完全基于文件的”感到困惑。 – 1001b

+0

您可能想要了解什么是静态网站。 DocPad就是这样一个静态网站*生成器*。它生成一个静态网站,您可以在任何地方部署。基本上内容不会改变,它始终以相同的方式提供服务,这使得它成为服务网站的更快方式,因为没有服务器端逻辑。 “完全基于文件”的想法意味着服务器中没有数据库正在进行。 – greduan

回答

7

DocPad被定位为下一代Web架构。这种思维导图展示了为什么我们完美地叫它:

DocPad Architecture Vision http://d.pr/i/jmmZ+

的工作流程是,像这样:

  1. 进口商在把数据从任何来源,无论是本地文件系统,或tumblr,或者mongo数据库。
  2. 这些获得注入DocPad内存数据库
  3. 在生成时,DocPad然后将渲染需要渲染什么,输出静态内容进入了目录
  4. 动态的文档(文档,重新呈现在每个请求)和动态能力(服务器扩展)现在都能够利用内存数据库并执行高级酷东西,如文件上传,联系表单,搜索页等等

从这个意义上说,DocPad是一个具有静态站点生成能力的下一代Web架构,以及动态站点生成能力。 DocPad与传统网络体系结构的区别在于,传统的网络体系结构考虑了内容和模板,DocPad认为它们是相同的,并且通过扩展将它们分开。传统的Web架构在默认情况下也是动态的,静态网站生成是通过缓存完成的,而不是默认静态的其他方式。

由于这一负载的内存数据库的一切情况,我们正在遭受一些在成长和后代的表现与成长的痛苦。 Discussion here.但是没有什么东西不能用足够的时间和资源来解决。无论如何,由于静态性质(更快的请求)以及异步性质(更快的世代),DocPad仍然会比传统Web体系结构更快。

在你将如何处理文件上传方面:

  • 如果你正在做DocPad静态网站,你将有一个后端API服务器在其他地方,你会做上传过并加载数据放入DocPad中作为单页面应用程序样式。

  • 如果您正在使用DocPad制作一个动态网站,您可以在Heroku等服务器上托管DocPad,并扩展服务器以处理文件上传到诸如Amazon S3,Dropbox或MongoDB之类的目的地。然后,您可以选择通过templateData作为链接公开文件,或者将文件作为文件注入DocPad内存数据库。您选择的是您是否想引用上传文件或将其作为DocPad Universe中的头等公民(它获得它自己的URL和页面)。

对于动态网站,我会说我真的用静态网站+单页面应用程序的方法。您可以获得诸如响应式设计,离线支持,非常快速的用户体验(UX)等好处,但无论您使用哪种Web体系结构,您都可以通过动态网站方法来完成它。

1

好了,我不能顶掉本杰明出色的交代,但如果你想有一个TLDR交代:

docpad用于(最大使用情况)生成静态网站,一拉GitHub的页面或旧90年代的网站。你可以用自己喜欢的方式编写你的页面(Jade,eco,coffeescript等),它将编译页面并输出HTML文件。把它想象成“永远编译一次服务器”的东西。另一方面,如果您想在您的网站上使用动态内容,您希望使用Nodejs从其他网站获取动态数据,或者动态生成动态数据。

至于你对Heroku的临时文件系统的担忧,(我不知道确切的工作原理),你可以使用Amazon的S3进行存储。检出this