我在OPcache中使用PHP。我只想掌握在生产中部署我的网站(并不是真的,只是在单元测试之后,但没关系)。在php.ini文件中,OPcache设置大约是“时间”和“频率”。但我只想在git拔出我的服务器后重新设置缓存。
因此,我想我只需要在git-拉我的生产服务器之后调用opcache_reset,并将opcache.validate_timestamps设置为0 (永不重置缓存)。
我没有读到任何关于那方面的东西,所以我怀疑:我不知道这是否是一个好的练习。我错过了什么吗?有风险吗?好吗?
非常感谢!
P.S.:我使用的是PHP和composer (composer install在git-pull之后运行)
发布于 2016-07-22 17:16:39
为了从OPCache中获得最大的好处,您应该禁用opcache.validate_timestamps。如果以后每次将代码部署到服务器时都从脚本中调用opcache_reset(),那么您的OPCache将为每一组新文件清除一次,并且系统不会不断地检查这些文件。
然而,有几个“陷阱”:
首先,确保发生了对opcache_reset()的调用,否则您将运行旧代码。如果您有一个要执行部署的脚本,如果此步骤不执行,请确保它大声失败。
其次,取决于PHP的具体运行方式(mod_php vs Php),您可能需要通过对浏览器的请求而不是通过命令行执行opcache_reset()函数。例如,清除缓存的最明显的解决方案是有一个简单的PHP文件,如下所示
<?php
if (php_sapi() != "cli") die("Not accessible from web");
opcache_clear();并在每次代码提取时执行该文件。取决于PHP的版本和运行方式,这可能只会清除命令行的缓存,而不会清除运行中的web版本。
如果从命令行清除不起作用,请考虑创建类似的脚本,并使用curl或wget通过web调用它。例如,curl http://example.com/clear_cache.php?secret=abc123。如果您创建的脚本是可访问的,那么请确保它检查一个秘密密钥,以防止有人通过不断清除您的缓存来加载您的服务器。
最后,正如其他人所建议的那样,为了使您的构建在测试和部署之间完全可重复,请考虑让测试过程的结束创建用于测试的整个代码的.zip文件,包括由composer提取的库。与服务器上的git pull不同,只需将文件解压缩到代码根上即可。我意识到git pull && composer update很容易。但是,正如其他人所建议的,如果库在运行测试和部署时间之间被更新,那么您的代码可能不再像预期的那样工作。
https://stackoverflow.com/questions/28013726
复制相似问题