- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我将 PHP 与 OPcache 结合使用。我只使用 git-push to master 来在生产环境中部署我的网站(不是真的,它只是在单元测试之后,但没关系)。在php.ini
文件中,OPcache的设置是关于“时间”和“频率”的。但我只想在我的服务器上 git pull 后重置缓存。
所以我想我只需要在我的生产服务器上进行 git-pull 之后调用 opcache_reset
并将 opcache.validate_timestamps
设置为 0
(从不重置缓存)
我没有读过任何关于这种方式的文章,所以我怀疑:我不知道这是否是一种好的做法。我错过了什么?是否有任何风险或是否可以?
非常感谢!
附言: 我正在使用 PHP 框架和 Composer (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();
并在每次 pull 代码时执行该文件。根据 PHP 的版本及其运行方式,可能只会清除命令行的缓存,而不是您正在运行的 Web 版本的缓存。
如果从命令行清除不起作用,请考虑创建一个类似的脚本并使用 curl
或 wget
通过网络调用它。例如,curl http://example.com/clear_cache.php?secret=abc123
。如果您创建可通过网络访问的脚本,请确保它检查 key 以防止有人通过不断清除缓存来加载您的服务器。
最后,正如其他人所建议的那样,要使您的构建在测试和部署之间完全可重复,请考虑在测试过程结束时为用于测试的整个代码创建一个 .zip
文件,包括 Composer 撤下的图书馆。不要在您的服务器上使用 git pull
,只需将文件解压缩到代码根目录即可。我意识到 git pull && composer update
很简单。但是,正如其他人所建议的那样,如果库在测试运行时间和部署时间之间得到更新,那么您的代码可能不再按预期工作。
关于php - 仅在 git push 后重新验证 opcache,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28013726/
我的团队正在使用 gerrit 代码审查,本质上这意味着默认的推送行为会绕过标准工作流程,因此我们需要使用 git push origin HEAD:refs/for/feature 来正确推送我们的
我是 assembly 新手,我正在使用 MASM。我看到这些代码行,想知道这之间有什么区别 a) push myVar b) push [myVar] c) push OFFSET myVar 我怎
美好的一天! 将镜像推送到docker hub时遇到一些问题。我的第一个软件版本: vagrant@debian-8-docker:~$ docker version Client version:
我有三个 Controller 一二三 .首先是navigationController的rootViewController。 在 SecondViewController ,我有一个名为 的协议(
我在这个 Google 教程的帮助下实现了一个 Web Push API: https://developers.google.com/web/fundamentals/getting-started
我有两个模式: var optionsSchema = new Schema({ locationname: String, locationnumber : String
我是 git 的新手并对其进行了测试。我已经能够克隆 friend 存储库进行小的本地更改并提交。 我现在想测试将我的本地更改推送到远程存储库,但不幸的是当我尝试进行推送时 $ git push <
我们正在公司讨论 git rebase 之后该做什么。在rebase之后,您需要将更改推送到远程origin,但是当git不允许时我们应该怎么做呢?实际上,我们正在讨论当分支已经被推送时我们最常用的两
我正在使用具有嵌入式 github 支持的新 IDE。在命令行本地,我可以成功地使用 git push orgin master 并更新 github。但是我的 IDE 使用带有 -v 标志的命令,这
我仍在阅读有关 RoR 的一些指南,我被困在 Deploying The Demo App 上 我遵循了说明: With the completion of the Microposts resour
我正在尝试创建一个可以将我的 git 存储库镜像到另一个存储库的脚本。一切正常,但它一直在说 [remote rejected] refs/pull/xx/head -> refs/pull/xx/h
我想了解使用 Tortoise SVN 构建过程的一些过程。主要是 我想知道你是否插入: 主线中继 QA 后的一个分支将其抓取到本地的工作副本中并测试该分支,然后一些构建推送该分支 我遇到的问题是我在
在谈论将消息推送到移动应用程序以触发 WAP 内容的下载时,似乎都使用了 WAP 推送和 SMS 推送这两个术语。 这些术语是指相同的机制还是具有不同的含义? 最佳答案 SMS Push 是告诉终端发
我只是想知道是否有人使用这种技术: 由于推送通知仅随 OS 3.0 一起提供,因此我一直在考虑使用电子邮件推送(Exchange、mobile.me)作为解决方法: 您可以注册一个 URL,例如。 m
我正在 build WP website using DIVI theme .应该被插入 dataLayer 的标签被默认的“未设置”值卡在某个地方。 为了推送我使用脚本的值: functi
我最近删除了xcode 6 beta 3并安装了xcode 6 beta 6 当我在终端输入gitpush时,这发生了 xcrun:错误: Activity 的开发人员路径(“/Application
我即将实现ionic-native Push Notifications .这可以在浏览器中运行吗?还是我需要安装 iOS/Android 模拟器? 最佳答案 除非您使用 Phonegap 推送服务器
Safari 12.1 是否支持服务 worker PWA 推送通知?我试过这个 demo在 iOS 上,但它仍然不适合我。 有机会得到它们吗?谢谢。 最佳答案 目前没有关于此功能的通信...Appl
目前我有很多 chrome 浏览器的推送订阅都是这样的方法, swr.pushManager.subscribe({userVisibleOnly: true}) .then(function
我需要 4 个过渡效果,但我只知道 2 个过渡效果,还有 2 个我不知道。我知道的 2 个过渡动画是: 过渡时下推: 并向下推过渡: 但
我是一名优秀的程序员,十分优秀!