1

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

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

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

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

关于如何解决这个问题的任何想法,除了在每次新部署时删除已编译的模板?有没有办法让 Elastic Beanstalk 保留修改时间?或者有没有办法让 Smarty 了解除了文件的修改日期之外模板文件已经更新?

4

1 回答 1

1

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

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

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

于 2017-09-07T21:30:33.207 回答