Smarty 文件不会使用 Elastic Beanstalk、CodePipeline 和 CodeCommit 重新编译

Smarty files are not recompiled using Elastic Beanstalk, CodePipeline and CodeCommit

我正在使用 Elastic Beanstalk,使用 CodeCommit 和 CodePipeline 部署我的应用程序。我正在使用 Smarty 进行模板化。为了避免在我部署新版本的应用程序时重新编译所有模板,我想将编译后的模板文件保存在 /var/app/current/ 目录之外,每次部署时它们都会被删除。

但是当我这样做时,Smarty 在更新原始模板文件时不会更新编译后的模板文件。我已经调查找出原因,当我查看我在 EC2 实例上的原始模板文件时,它们的最后修改日期都是 1979-12-31 05:08:00.

似乎Elastic Beanstalk 在部署时不保留文件的修改日期。也许原始修改日期在 CodeCommit 或 CodePipeline 中丢失了?

我的猜测是 Smarty 查看文件的修改日期来确定编译的文件是否是最新的。由于编译后的模板比原始模板更新,因此即使它们不是最新的也被认为是最新的。

除了在每次新部署时删除已编译的模板外,我对如何解决这个问题有什么想法吗?有没有办法让 Elastic Beanstalk 保留修改时间?或者有什么方法可以让Smarty知道除了文件的修改日期之外,模板文件已经更新了?

CodeCommit 为存储库中最新提交到 S3 的内容生成一个 zip 存档。 CodePipeline 将此存档用于您的 ElasticBeanstalk 应用程序。

zip 存档中每个文件的修改日期设置为 0 纪元或 1970 年 1 月 1 日 12:00:00 AM GMT,无论文件上次在存储库中添加或更改的时间如何。将来,这可能会更改为生成存档的时间戳或进行提交的时间戳。

因此,我们不建议根据文件的最后修改日期来对您的应用程序逻辑做出任何决定。我不清楚为什么您看到的最后修改日期是 1979-12-31 05:08:00(0 纪元后 10 年)。