PHP opcache重置+符号链接式部署

Vit*_*kov 19 php deployment symlink opcache

我试图在符号链接式部署后重置PHP opcache.opcache_reset.php我的项目中的文件在wget文档根的符号链接替换后执行:

<?php
clearstatcache(true);
opcache_reset();
Run Code Online (Sandbox Code Playgroud)

尽管如此,仍然使用旧文件.根据opcache_get_status()输出,manual_restarts增加的数量last_restart_time保持最新,但文件路径仍然过时.我需要opcache_reset.php在部署后一分钟左右手动调用以使事情正确.

PHP版本是5.5.6,ZendOpcache是​​7.0.3-dev.Opcache配置:

opcache.blacklist_filename => no value
opcache.consistency_checks => 0
opcache.dups_fix => Off
opcache.enable => On
opcache.enable_cli => On
opcache.enable_file_override => Off
opcache.error_log => no value
opcache.fast_shutdown => 1
opcache.force_restart_timeout => 180
opcache.inherited_hack => On
opcache.interned_strings_buffer => 8
opcache.load_comments => 1
opcache.log_verbosity_level => 1
opcache.max_accelerated_files => 4000
opcache.max_file_size => 0
opcache.max_wasted_percentage => 5
opcache.memory_consumption => 128
opcache.optimization_level => 0xFFFFFFFF
opcache.preferred_memory_model => no value
opcache.protect_memory => 0
opcache.restrict_api => no value
opcache.revalidate_freq => 60
opcache.revalidate_path => Off
opcache.save_comments => 1
opcache.use_cwd => On
opcache.validate_timestamps => On
Run Code Online (Sandbox Code Playgroud)

Vit*_*kov 41

ZendOptimizerPlus问题中描述的原因和两种可能的解决方案.我们通过$realpath_root在nginx配置中使用来解决它:

fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
Run Code Online (Sandbox Code Playgroud)

  • 我正在使用相同的 NGINX 指令。但是,我需要重新加载 php fpm 以确保 php fpm 使用新目录中的代码。不过,重新加载 fpm 让我丢失了一些请求。如果我不重新加载 fpm,那么它仍然会执行旧目录中的代码。这里描述了相同的问题:http://serverfault.com/questions/630573/atomic-deployments-with-nginx-and-php-fpm 你能帮忙吗? (2认同)

小智 5

如果您由于某种原因无法将 fastcgi_param 与$realpath_root符号链接样式部署一起使用,请尝试opcache.revalidate_path = On在 php ini 配置中进行设置。我无法找到任何好的文档来解释这个 ini 目录在幕后如何工作,但在我更改符号链接后它确实起作用了。希望这对任何人都有帮助。