仅在 git 推送后重新验证操作缓存



我正在使用带有OPcache的PHP。我只 git-push 到 master 以在生产环境中部署我的网站(不是真的,它只是在单元测试之后,但没关系)。php.ini文件中,OPcache 设置与"时间"和"频率"有关。但我只想在我的服务器上进行 git 拉取后重置缓存。

所以我想我只需要在我的生产服务器上的 git-pull 后调用opcache_reset并将opcache.validate_timestamps设置为 0(永远不要重置缓存)

我没有读过任何关于这种方式的内容,所以我怀疑:我不知道这是否是一种好的做法。我错过了什么吗?是否有任何风险或可以?

多谢!

PS:我正在使用PHP框架和作曲家(composer install在git-pull之后运行)

为了从 OPCache 中获得最大的好处,您应该禁用 opcache.validate_timestamps 。如果随后每次将代码部署到服务器时都从脚本调用opcache_reset(),则每组新文件都会清除一次 OPCache,并且系统不会浪费资源不断检查文件。

但是,有几个"陷阱":

首先,确保对opcache_reset()的调用发生,否则您将运行旧代码。如果您有用于执行部署的脚本,请确保在此步骤未执行时大幅失败。

其次,根据 PHP 的运行方式(mod_php 与 php-fpm),您可能需要通过对浏览器的请求而不是通过命令行来执行 opcache_reset() 函数。例如,清除缓存的最明显的解决方案是拥有一个简单的PHP文件,如下所示

<?php
if (php_sapi() != "cli") die("Not accessible from web");
opcache_clear();

并在每次代码拉取时执行该文件。根据 PHP 的版本及其运行方式,可能只清除命令行的缓存,而不清除正在运行的 Web 版本的缓存。

如果从命令行清除不起作用,请考虑创建一个类似的脚本并使用 curlwget 通过 Web 调用它。例如,curl http://example.com/clear_cache.php?secret=abc123 .如果将脚本创建为 Web 可访问,请确保它检查密钥,以防止有人通过不断清除缓存来加载您的服务器。

最后,正如其他人所建议的那样,为了使您的构建在测试和部署之间完全可重复,请考虑让测试过程结束时创建一个用于测试的整个代码的.zip文件,包括由 composer 拉下的库。与其git pull服务器上,不如将文件解压缩到代码根目录上。我意识到git pull && composer update很容易。但是,正如其他人所建议的那样,如果在运行测试的时间和部署时间之间更新库,则代码可能不再按预期工作。

相关内容

  • 没有找到相关文章

最新更新