The Setup:
我正在使用Amazon Web Services的Elastic Beanstalk设置一个Wordpress驱动的应用程序。所有开发都是在本地的MAMP apache2/php5服务器环境下进行的,GIT存储库控制着整个应用程序根目录。
Deployment Workflow:
向repo提交任何代码更改(编辑、新插件等)后,将使用AWS EB CLI部署应用程序
eb deploy
命令,将最新版本推出到由Elastic Beanstalk管理的任何正在运行的EC2实例。
My Issue:
有时代码更改在我的开发/生产环境之间没有完全同步,我不知道如何克服它。尤其是在尝试安装和安装W3 Total Cache或WP Super Cache等插件时。
由于我的本地环境没有安装memcahced服务器之类的东西,但我的生产环境安装了(ElastiCache),因此我无法保存正确的设置文件并将其部署到生产环境中使用。这些插件不允许我选择所需的服务,因为它认为它们不可用。。。
似乎只有将W3 Total Cache直接安装到实时生产环境中,我才能让它工作,这似乎是个坏主意。
Given the above:
<我的部署是否走错了方向?
是否应该在本地开发环境中安装和配置W3 Total Cache之类的插件,并将其推送到生产环境中?
最合适的回答,由SO网友:MathSmath 整理而成
这里发生了几件不同的事情,但我的两分钱:
1) 哲学上:如果文件可能在其任何远程部署上下文中被修改,请不要将其保存在repo中。由于W3TC将其设置保存在一个平面文件中(并且每次在任何上下文中进入W3TC设置屏幕并点击“保存”时,该平面文件都会更新),因此很难确保在任何上下文中所做的更改返回到repo(以及随后的其他上下文)。因此,任何直接在prod上进行的配置更新都将在下次推送代码时被吹走。知道我的意思吗?
2) 由于W3TC的一些功能是特定于环境的(如您所说,memcahce vs not,apache vs nginx等),因此在与生产环境有本质不同的本地环境中测试它并没有什么指导意义。您不能创建相同的配置,因为您的环境不同。这是合乎逻辑的。我会考虑设置一个登台环境(与prod设置相同),在那里您可以测试W3TC设置。拨入设置后,可以使用W3TC的导出/导入功能在环境之间移动设置。如果需要,可以将导出文件(而不是自动生成的设置文件)保存到repo中,以供将来参考。有点像穷人的SCM,但适用于这种不需要经常更改的东西,并且可以经受一些手动设置。
如果您想进入更复杂的部署场景,还有很多更“完整”的解决方案。如果您使用的是像Bambol这样的工具,那么您可以编写部署的各个方面的脚本。但在您的设置中,我只需要将W3TC配置从SCM中完全去掉,并采用手动方法。作为一个长期目标,可以考虑在本地运行虚拟机,而不是在MAMP上运行虚拟机——它们可以让您在本地复制prod环境。但他们的学习曲线很陡。
SO网友:Wyck
通常,您的操作码缓存将检测文件更改并更新缓存条目,因此您需要更具体地了解哪些内容不起作用,memcache、操作码、静态文件、瞬态等?
默认PHP操作码缓存为5秒,可在配置中更改opcache.revalidate_freq
.
您可以在部署时使用服务器端的东西刷新缓存,例如memcache_flush
或者许多插件都带有挂钩,可以用来刷新缓存,对于W3 Total缓存来说就是这样w3tc_pgcache_flush
例如还可以看看wp_cache_flush
. 您可以在推送时通过cli执行此操作,也可以创建web端点(根据您使用的内容,现在有很多工具可以执行此操作)。
这实际上取决于您的具体设置,通常您希望尽可能近距离地模拟实时站点,即使您的本地主机没有模拟实时服务器,也应该使用具有模拟实时服务器的临时服务器。