如何在不重新启动服务器的情况下将expressjs静态模板部署到AWS?

时间:2019-04-12 16:00:22

标签: node.js amazon-web-services express handlebars.js

我有我部署到AWS Elastic beantalk的express.js服务器服务器。我使用车把引擎进行模板制作。模板的结构更改比服务器代码更频繁,因此我希望有一种快速的方法来部署它们。我已经尝试过在单独的S3静态存储桶上托管模板,然后从nodejs代码加载它们。这样,我可以通过使用S3静态部署来真正快速地将更改部署到模板,而不是function myMapper() { //The mapper function is called with each document, which has the special name 'this' //Emit a key-value pair: var hashtag; /*for (hashtag in this.entities.hashtags[0]) { //print(hashtag.text); emit(hashtag[0][1], 1); }*/ for (bop in this.entities) { //print(hashtag.text); //emit(bop, 1); var myArr = JSON.parse(bop.hashtags); for (ding in myArr) { emit(ding, 1) } //emit(bop.hashtags[0], 1) for (beep in bop.hashtags) { //emit(beep, 1); //emit(beep.hashtags, 1) //emit(beep[0], 1) /*for (thing in beep) { emit(thing, 1); }*/ } } //emit(this.entities, 1); } 来重新启动所有服务器节点。

这是我的用于模板加载的node.js服务器代码:

eb deploy

这解决了模板部署速度问题,但是我不确定它是否不会带来额外的性能损失。我以为,由于S3和Elastic beantalk都是亚马逊服务,因此影响应该很小,但是网站基准使我不这么认为。

也许有更好的方法来解决模板部署速度的问题?

1 个答案:

答案 0 :(得分:2)

关于基准测试编号,我认为这是因为您的代码每次需要渲染视图时,都会尝试从s3获取视图模板。这些网络通话会导致开销。

我曾经在以前的一个项目中面临过类似的挑战。但是,在我们的情况下,这些频繁更改的模板的大小和数量都在可接受的范围内,并且可以将它们存储在内存中。

我们最终创建了一个用于存储这些静态模板的GIT存储库。我们的express服务器将加载这些模板,并在启动时将其缓存在内存中。

我们配置了一个Webhook,以在每次模板更改(git repo中的新提交)时ping express服务器。然后,服务器使其缓存无效,并从同一存储库加载新模板。这样,我们无需为静态模板中的每个更改都重新启动服务器。