本文概述
- 或者, 对于我之前使用过的所有服务器:回顾一下我犯下的五个最糟糕的WordPress错误
- 我更新WordPress Core的受黑版本的时间
- 我将整个平台拖到同级目录中的时间
- 我通过add_filter()删除所有前端内容的时间
- 我在无限循环内被零除的时间
- 我让项目失控直到所有人都感到厌恶的时间
- 勇往直前, 从他人的错误中学习
几年前, 我听说马特·穆伦维格(Matt Mullenweg)发表了一些言论, 其结果是大多数人重复犯错, 更聪明的人从错误中吸取教训, 而我们当中最聪明的人从他人的错误中吸取教训。我更喜欢这样, 并且要推论一个结论:每个人都会犯错误, 谦虚的人私下分享这些错误, 我们当中最勇敢的人将其写下并发布在博客中!
但是以后还有时间沉思。你正在阅读这篇文章是因为你想听到火车撞车的消息, 所以我是工程师。没有更多的序言, 请和我一起惊恐地回顾我作为WordPress开发人员犯的五个最尴尬的错误。
我更新WordPress Core的受黑版本的时间我只是从做一些晦涩难懂的CraigsList编码演出毕业, 然后才真正在一家真正的经纪公司工作。我到了!我不敢在睡椅以外的地方从沙发上工作, 而感到紧张。但是即使那样, 我通常还是从WordPress Doing It Wrong中知道WordPress对, 并且我发现它自夸自夸地吹嘘WordPress最佳实践, 例如从来没有” hacking core” 。
我在该机构的第一个WordPress开发任务是恢复一个停滞的项目, 这对我当时的技能来说是一个相当复杂的项目。它涉及WordPress注册和登录流程的许多自定义项。据说以前的开发人员仅通过编辑核心wp-login文件即可取得重大进展。
我知道这是不可持续的, 所以我的首要任务是安装备份/还原插件, 并用新下载的版本替换WordPress核心。我坚信该项目到目前为止还没有执行任何令人印象深刻的事情, 而且我将能够通过过滤器模仿现有功能集。
那时我可能有或没有的任何编码能力很快都变得无关紧要, 因为我的新雇主开始疯狂。她不了解” 黑客核心” 的重要性, 我还不够成熟, 无法以一种可消化的方式对其进行解释。唯一让她的额头降温的东西是当我向她保证可以通过安装的备份/还原插件还原时。
你能猜出这是怎么回事吗?
就像命运那样, 该插件仅备份wp-content文件夹。这些核心文件中的任何WordPress hack都永远消失了。我仍然记得我发给她的电子邮件(到目前为止, 她已将我放逐回我的家庭办公室很久了):
伙计们, 我无法备份
我确实准备通过过滤器和操作来完成她想要的功能集, 但是她听不到。她当场开除了我, 扬言要起诉我, 并且从不付我两周的辛苦工作。我好丢脸。
我可以从这种经验中学到很多东西(现在很明显)。一般的教训是, 备份是在经过排练和确认之后才是备份, 这是一个很好的选择。但是, 让我更加困扰的是关于如何在WordPress中进行准确备份的一门具体课程, 尤其是使用WordPress核心。
我已经学会了珍惜具有强大的备份/还原系统的WP-Engine等托管环境。许多精品店主机拥有各种命令行工具和其他以开发人员为中心的功能来执行备份, 但是WP-Engine是我的最爱。除非你的网络非常庞大, 否则速度会非常快。用户界面很简单。它有一个UI, 句号:任何知道如何使用WordPress的人都可以使用它。也就是说, 与某些CLI方法(可能要快得多)或Plesk中埋藏的一些晦涩的事物形成对比, 我的客户可以使用, 理解, 监视它并验证我是否正在使用它。我是忠实粉丝。
我将整个平台拖到同级目录中的时间我对专业工作场所还??很陌生, 一直都是Windows人士。但是, 我的新工作是在Mac商店中, 我学会了非常快地爱上它的所有内容。好吧, 几乎所有东西。我似乎在使用” 魔术鼠标” 时遇到了很多麻烦。我有断开蓝牙连接的趋势, 一旦重新连接, 就会导致意外的并且经常令人恐惧的拖放操作。不仅如此, 我还只是笨拙地掌握了一种新的精细运动技能。
过去, 我们的WordPress开发流程仍然包括通过FTP部署到生产环境。对于我来说, 花整整天的时间编写代码, 聊天, 回复电子邮件, 通常是通过我的新魔术鼠标来回回旋, 而Cyber??duck则可以在我的台式机上投入生产, 这并不罕见。天哪, 听起来不好!但这就是事实。
一天, 我们的整个平台都消失了。我们的系统管理员很快就认为这是某种DDoS或一般情况下的水平。对于我们的开发人员, 我们相信他的直觉, 并假设他会尽快解决。
数小时过去了。一天来了去。还没下来
到第二天早上, 情况恢复了, 我们的CTO轻轻地请我和她一起加入会议室。我们的系统管理员已确定问题。他提取了FTP日志, 并发现我的用户已将整个平台移到同级目录中。也就是说, wp-content已嵌套在wp-includes下。
我垂头丧气, 但我们的CTO非常满意。她可以看出我通常是一个乐于助人且负责任的员工, 但她向我提出挑战, 要超越单纯的奉献精神, 想出办法防止这种情况再次发生。我发现了两个非常有用的东西。
首先是找到一个CLI命令, 以防止Cyber??duck完全允许远程文件移动。这是一项很好的安全措施, 我们立即将其用作公司政策。
第二个是我对通过Git进行部署非常感兴趣。最终, 我最终写了一个WordPress插件, 将我们的Bitbucket版本编织到正常的wp-admin更新流程中。从那时起, 我们几乎没有理由甚至可以通过FTP访问产品。这个插件是我最喜欢的专业成就之一。当然, 对Git的亲和力是当今开发人员的先决条件。
我通过add_filter()删除所有前端内容的时间我真的以为我到现在为止对WordPress的实践已经变得非常聪明。要求是将” 徽章” 附加到特定类别的职位上。出于某种原因, 我想到只有noob会为这样的事情向模板文件添加另一个条件, 因此, 我感到非常自豪, 实现了以下过滤器:
add_filter( 'the_content', 'myprefix_add_a_badge' );
function myprefix_add_a_badge( $content ) {global $post;
if( ! has_category( 'sponsored', $post )) { return false;
}$out = $content . myprefix_get_badge();
return $out;
}
看到这有什么问题吗?我在分阶段进行了快速测试, 以确认必要的帖子已应用其徽章。然后我部署了它并离开了一天。你可能会猜到, 宇宙爆炸了。
具体来说, 结果是没有徽章的帖子在前端完全没有内容!你知道为什么吗?问题在于, 我没有返回$ content处于警戒状态, 而是返回false。但是这里确实存在很多错误层。
为什么我满足于仅测试帖子是否获得徽章?为什么我还不测试其他职位是否保持正常?我为什么这么晚才部署到生产环境?为什么我们的质量控制完全由我单击一下并刷新页面组成?
所有这些问题的答案可以概括为成熟度。在我们开始投资于视觉回归测试和单元测试之类的事情之前, 仅仅需要一段时间就可以犯下此类错误。这个特殊的错误是数百个稻草中的一个, 最终使骆驼退缩, 使我变得对phpUnit和xDebug投入了很多精力。反过来, 那些工具教会了我关于编写可测试代码的知识, 这可能比测试本身防止了更多的错误。
我在无限循环内被零除的时间客户的要求是重新格式化WordPress博客文章的下划线, 以便日期显示为” XYZ前” , 而不是” 2011年11月10日” 。我不确定如何实现此目标, 但我知道这是一种日期格式, 而且似乎越来越流行, 实际上Google博士很快就向我提供了一段代码。它在我的本地工作!它有很多数学, 尤其是很多除法。我不确定为什么它有用—有很多嵌套的循环, 余数, 舍入等。但是它是在Google上运行的, 而且似乎可以运行, 我很高兴将其部署到生产环境中。
大约30分钟后, 我从系统管理员那里得到了一个不友好的Skype。生产下降。死在水中。他问我最近是否被零除, 我不知道他指的是什么。这是发生了什么事。
信不信由你, 在样本量足够大的情况下, 我发现难以理解的” 在本地工作” 片段具有一定的异常行为能力。在提供一些不幸的日期, 小时和分钟的组合后, Rube Goldberg循环有时会尝试将数字除以零。回想一下中学数学:
在普通算术中, 该表达式没有意义, 因为不存在将其乘以0得出a(假定a≠0)的数字, 因此不定义除以零的情况。 -维基百科那么这对计算机意味着什么呢?通常情况下, 日志中只会显示一条错误消息, 但对于我而言, 情况更糟:数学错误干扰了我的循环逻辑, 导致我的嵌套循环无法完成运行-无限循环导致白屏死亡。而且情况变得更糟!因为循环的每次迭代都在写一个除以零的错误, 所以错误日志的比例越来越大, 并开始妨碍我们的文件系统。这是DDoS攻击的结果, 尽管这是一种荒唐的自我攻击。
这个错误的坏处是它删除了一个高流量站点。这个错误的好处是, 它极大地改变了我的工作方式。最重要的是, 我为自己的不执行而感到羞愧。我发誓永远不要在不花力气去理解每一行的情况下再次粘贴代码段, 甚至在必要时与代码段作者进行跟进。
不仅如此, 我发誓再也不会发布对新手开发人员来说不易理解的代码。我迷上了WordPress编码标准, 文本编辑器扩展, 内联注释和docblock, 甚至制表符与空格, 那是经典的通过仪式!总而言之, 我决定关心的是阅读代码的难易程度而不是编写代码的难易程度。这种对粘贴而又不理解的反抗使我对管理第三方依赖关系产生了浓厚的专业兴趣, 这一主题在随后的十年中为我提供了各种写作和演讲的机会。
我决定更关心阅读代码的难易程度, 而不是编写代码的难易程度。
鸣叫
哦, 这个错误真的很有趣吗? WordPress核心为此提供了一种一线解决方案。
我让一个项目螺旋式失控, 直到每个人都感到厌恶的时候我完成了一个非常有趣的项目。我将成为技术主管和WordPress开发工程师, 并且有一名Amazon AWS Lambda开发人员和一位向我报告JavaScript的资深专家。这是我第一次有多个人向我汇报, 这是迄今为止我从事过的最复杂的项目。甚至把它称为WordPress项目都大大低估了这个问题, 但是WordPress是将整个事情结合在一起的粘合剂, 所以让我担任技术负责人是有意义的。
因为我的主要角色通常是严格地成为技术人员, 并且因为我对极简主义有浓厚的兴趣, 所以我从来没有想到要实现诸如Jira或Basecamp之类的东西或任何用于任务管理的真正平台。在项目的第一次迭代中, 一切进展顺利。我们能够处理我们自己的单个组件, 将客户规格文档称为我们的产品路线图, 并且在需要将各个组件耦合在一起时, 可以通过Slack彼此进行ping操作。
当我们开始向客户展示进度并实施他的反馈时, 麻烦就开始了。一开始由三人组成的团队立即感觉到它已被提升到一个新的数量级:不清楚是谁负责哪一部分反馈, 执行该反馈的状态如何, 甚至什至是谁与谁交谈。我们多次超过Gmail的每个线程100个回复的限制!
事情开始变得不舒服。我认为客户感觉自己失去了对项目方向的控制, 同样重要的是, 他感觉自己失去了对项目状态的了解。我的亚马逊开发人员提到有一天, “ 我想知道我们是否应该使用Trello。”
thought, 我想。三人团队需要这样的平台吗?同样, 我通常的倾向是希望使用更少的工具, 更少的开销, 更少的复杂性。但是这个项目已经把我们拖到了泥泞中, 那么尝试这样做有什么害处?
我梳理了所有电子邮件, 所有规格文档, 所有不同的注释线程, 并将它们全部映射到Trello板上。立即, 该项目从其数字墓中复活, 因为我们可以用更少的精力进行沟通。我们没有可爱的留言板, 列表和卡片, 而无需在我的电子邮件收件箱或大多是过时的规格文档中搜索文本。很容易看到任何功能的状态, 合并反馈以及分配新任务。感觉就像我们渐渐失明了一样, 慢慢地以至于我们没有注意到它, 然后突然又可以看见了。
当然, 代码不是自己编写的, 它仍然是一个非常具有挑战性的项目, 而且我们仍然必须运用每一滴技术。但这很重要:因为我们终于有了一个了解项目的基础架构, 所以我们现在可以自由地应用我们的技术技能。
我很高兴地说, 该项目已经完成, 客户对此感到完全满意。如今, 对于两个或两个以上团队, 我认为Trello或Jira是事实上的要求。
勇往直前, 从他人的错误中学习这是我在服役期间听到的最聪明的事情之一:” 中尉犯错是可以的, 而上尉犯错是可以的。对于机长犯下副错误, 或者副官犯下私人错误, 这是不对的。”
【五个最差的WordPress开发错误】换句话说, 你可以根据自己当前的责任级别犯一些常见的错误, 这是理所当然的。更重要的是你如何从中成长。
我希望我们作为开发人员在犯错误时学会同情他人, 希望其他人也一直与我们同在。我希望在犯错时保持好奇心和负责任的态度, 以便我继续创新以克服错误。我希望始终被一个鼓舞人心的WordPress专家社区所包围, 这些人的错误我可以向我学习, 避免自己犯错。最重要的是, 我希望其他人可以从我的经验中学到东西, 例如我在这里分享的WordPress错误。
相关:如何进行现代WordPress开发(第1部分)
推荐阅读
- React教程(组件,挂钩和性能(2))
- 使WordPress维护顺利的10个技巧
- 具有Roots Stack的现代WordPress开发工作流
- Angular组件 — 入门概述
- 前端(使用Gatsby.js和Node.js进行静态网站更新)
- Laravel零停机时间部署
- 使用Spring Boot实现带有STOMP的WebSocket实现
- 如何创建SSO按钮– Flask登录教程
- Win10系统文件夹怎样进行加密?