自动服务器最新资产/视图

时间:2014-08-24 22:41:26

标签: node.js express sails.js

我正在使用forever在生产中运行SailsJS,到目前为止,开发工作一直很顺利。 但是从PHP背景来看,似乎有一些东西在生产中仍然没有顺利运行。我们最近遇到的最大痛苦之一是,当您更新资产或视图(在我们的示例中为ejs文件)时,必须重新启动服务器以提供最新文件。

我可以在帆上使用的一个解决方案是在生产中使用grunt watchtask或永远使用-w,但两者看起来有点不自然,不得不观看'对于文件更改,而不是仅显示最新的。

不确定这是否仅仅是Sails的一个问题,但我猜这更像是Express和Node的一般问题。那么有没有办法让Sails / Express / Node服务器始终显示最新的资产/文件/视图而不必明确地观察它们?

1 个答案:

答案 0 :(得分:1)

Express应该动态渲染模板 - 也许我错过了使用SailsJS设置的东西。如果是这种情况,这个问题可能有所帮助:Sails.js application not refreshing files from assets after start

至于这个领域中的其他事情可能并非如此顺利地工作":

在典型的设置中,可能与PHP中的设置不同,您将部署整个站点而不是仅部署一个文件。这主要与您将Node.JS作为独立服务运行这一事实有关,并且您希望在每个部署中将与该实例相关的所有内容打包在一起。更不用说,您可能不想担心监视文件系统的更改所产生的开销,因此这种行为在开发环境中最有用。

这也意味着,如果您正在提供静态文件,您应该设置您的Web服务器以直接从文件系统提供它们,而不是让您的节点应用程序为它们提供服务。事实上,仅此一项就可以将资产下载时间缩短5到10倍。

我常用于我的应用程序的设置是: git 部署您的应用程序(使用post-receive hook)和 daemontools 以确保该服务熬夜。这将为您提供类似于Heroku或Nodejitsu的灵活部署设置。

我相信这是生产Node.JS系统的常见设置。而且,在我自己研究了大约一年前可用的内容之后,我真的没有什么东西可以考虑坚实可靠(包括 Forever )。 * nix社区已经完成了。

daemontools 远远优于许多其他* nix服务管理器,但它并不常用,因为它的作者DJB认为软件不应该关注自己像服务一样的东西。这正是使其成为Node.JS应用程序的理想选择,尽管对于仍然构建为独立服务的许多Unix应用程序来说有点不太理想(尽管许多软件可以通过允许非Java来实现daemontools守护进程模式,并非所有软件都会,这意味着发行版需要开发自己的解决方案)。

通过这种方式,您无法始终保证服务不会与节点崩溃,并且这些崩溃不会污染服务器的资源,即使您已经过了。能够抓住"他们。将异常捕获到日志或电子邮件中,让服务失败,保释和清理几乎更好,然后让daemontools自动将其重新启动。您可以在此处阅读有关Node.JS中错误处理的更多信息:http://nodejs.org/api/domain.html