为什么你不应该自行更新 Drupal 网站?
(译注:这篇文章主要还是针对于非专业人员及个人Drupal站长,对于专业的 Drupal 团队和公司而言 Drupal 的升级更新都有规范的操作流程,完全是家常便饭,不可能出现文中出现的这些情况。尽管如此,里面也还是有一些内容值得大家了解。)
有时我希望Drupal的升级和维护能够像Wordpress那样简单就好了,轻轻一点,Wordpress就能够在不影响其运行的情况下完成自身以及所有插件的更新。Drupal则完全不一样,稍有不慎你就会把你的网站搞瘫。
Drupal 之所以这么难搞是因为它的很多模块都需要依赖于其它模块才可以正常运行,这正是它得以模块化、灵活以及便于集成的优点,但这同时也是一件坏事,因为你必须对所有这些关系有所了解,才能在升级出现问题时进行排查。
许多 Drupal 站点的管理者,并不了解蕴藏在 Drupal 表面之下的事物是怎样结合和运作的。所以当他们看到“你有可用的安全更新”时,便觉得有必要试试进行更新——“嘿,我可以更新Windows,更新一下Drupal能有多难?”——如果你不是Drupal工程师、建站人员或者任何了解站点构造的人,建议你还是寻求专业人事的帮助和支持。
使用Drupal内置更新功能进行更新?
使用Drupal内置的更新机制进行更新是我们所知道的最常见错误。尽管表面上它看起来即简单又好用,但问题是如果一旦出错,你便无法回头了——Drupal崩溃后你便不再能够进入网站进行操作,即使有备份,也不能通过 Backup & Migrate 模块进行恢复。
导致Drupal崩溃或失败的常见原因有以下一些:
- 下载内核或模块更新出错
- 网络连接断开中断更新进程
- 更新版本与其它模块不兼容
- 更新版本与服务器上其它组件不兼容,如当前使用PHP版本
- FTP出错
- 文件系统出错(如权限出错)
很多用户都是线上的网站直接进行操作,这样做最坏的情况是网站出错而不能用了,你的用户和客户会因此流失。如果网站下线时间过长,也可以同 Google 和百度说拜拜了。
使用FTP对Drupal进行更新?
如果你比较精明,使用 FTP 对 Drupal 进行更新或升级,相对而言会安全很多,但也不是绝对安全。如果你对Drupal的目录结构不够了解,则很可能将文件上传到错误的目录、覆盖错误的文件,或者漏掉 .htaccess 这样的隐藏文件。
曾经有一次,一个客户将同一个模块上传到3个不同的目录并疑惑网站为什么运行得那么慢。他并不知道,Drupal尝试3次加载那个模块并导致内存泄漏。所以最好知道东西应该放在哪里,否则很可能会出问题。
使用FTP进行更新的另一个问题是,你依然是将更新模块上传到你的线上站点,不论是模块或PHP不兼容,都可能导致出错而让站点下线。除非你重新恢复之前的文件或者找到问题的解决办法。(译注:如果升级之后还运行了数据库更新,恢复文件可能也不能解决问题)
应该怎样正确地进行升级?
首先,永远永远永远不要在线上站点直接进行内核或模块升级,永远不要。专业的Drupal团队会使用模拟服务器(或称开发服务器、测试服务器)对你的网站更新进行测试和调试,从而确认是否所有的更新都是无害且不会导致网站损坏。这样,可以在不影响线上网站正常运行的情况下对问题、错误进行处理和修复,尽量保证用户、客户、Google和百度不会因为网站升级出错而离你而去了。
同时,使用 Git 对所有更新进行版本控制,以便确保当升级出现问题时,可以更方便地查找问题和进行恢复。
一旦所有更新都确认OK,便可以放心的将它们上传到线上服务器。更新时使用 Rsync 或 Git,尽量不要使用FTP,前者会更快速、更智能。
写在最后
当Drupal更新发布后,应该至少在一个月内进行更新,如果更新涉及安全问题,则更新周期还应该更短。(译注:如果是安全更新,应该尽快进行。如果非安全更新,不必操之过急)
虽然很可能平时 Drupal 网站的日常维护都是由你们自己负责,但需要对 Drupal 进行升级更新、或者网站出现问题、需要服务或技术支持时,还是应该将将其交由专业人士处理。这样会节省你的时间和减少头痛,并让你可以将精力集中你的公司业务而非网站上。
原文地址:http://drupalct.org/drupal-update/why-you-should-not-update-drupal-yourself.html
为什么你不应该自行更新 Drupal 网站?的更多相关文章
- 这些优化 Drupal 网站速度的超简单办法,你忽略了多少?
“怎么样能让我的 Drupal 网站更快一些?”是我们最常遇到的一个问题.站点速度确实非常重要,因为它会影响你的 SEO排名效果.访客是否停留以及你自己管理网站所需要的时间. 今天我们就来看看那些通过 ...
- Win7-IIS7下运行PHP网站(以配置好的drupal网站为例)
0.前提:IIS7已启用. drupal网站配置文件web.config中用到了“简洁链接”(URL重写),所以,还需要事先安装URL重写模块. URL重写模块(url rewrite)下载地址: r ...
- 如何查看Drupal网站使用的模块
大家在学习使用Drupal的过程中,总喜欢去查看或借鉴那些做得十分优秀的drupal网站,很想知道这个drupal网站使用了哪些模块?其实很简单,已经有人帮我们实现了这个愿望. 那就是DrupalXr ...
- Drupal网站报错:PDOException: in lock_may_be_available()
Drupal网站报错: 原因: windows中mysql的服务停止了: 解决办法: 在服务中,启动mysql服务 启动后,刷新页面,问题完美解决
- Drupal 网站漏洞修复以及网站安全防护加固方法
drupal是目前网站系统使用较多一个开源PHP管理系统,架构使用的是php环境+mysql数据库的环境配置,drupal的代码开发较为严谨,安全性较高,但是再安全的网站系统,也会出现网站漏洞,dru ...
- Drupal网站开发实践系列
这一系列文章会记录我最近一个项目的开发历程.包括用到的模块,功能的具体实现,调用的API,还有主题的制作,一部分前端信息等. 该网站基于Drupal7+Commerce制作,主题部分基本完全自定义,没 ...
- Linux下svn提交文件后自动同步更新到网站目录
有时,对于多文件需要上传到服务器的时候将会很麻烦,但是如果使用svn的钩子脚本就容易实现本地提交svn后,自动同步代码文件到远程服务器的网站目录下,而不必手动上传了. 首先,在网站目录下checkou ...
- 如何利用svn自动同步更新到网站服务器
我们最终的目的是:当本地提交后,SVN服务器自动更新服务器端指定WEB目录内的文件 实现方法: 找到服务器端 SVN版本库所在的目录(目录名称是Repositories),这个目录是在安装Visual ...
- centos6.9 svn提交更新到网站根目录
一.首先创建网站根目录 ~] # mkdir -pv /export/home/cms/www_dyrs ~] # svn co svn://127.0.0.1/svn1 /export/home/c ...
随机推荐
- 【Spring学习笔记-1】Myeclipse下Spring环境搭建
*.hl_mark_KMSmartTagPinkImg{background-color:#ffaaff;}*.hl_mark_KMSmartTagBlueImg{background-color:# ...
- netty常用代码
一. Server public class TimeServer_argu { public void bind(int port) throws InterruptedException { Ev ...
- (C/C++) 算法,编程题
注: 如下的题目皆来自互联网,答案是结合了自己的习惯稍作了修改. 1. 求一个数的二进制中的1的个数. int func(int x) { ; while (x) { count++; x = x&a ...
- Redis 发布/订阅机制原理分析
Redis 通过 PUBLISH. SUBSCRIBE 和 PSUBSCRIBE 等命令实现发布和订阅功能. 这些命令被广泛用于构建即时通信应用,比如网络聊天室(chatroom)和实时广播.实时 ...
- iOS UIWebView 捕获403 、404错误
#pragma mark -#pragma mark - UIWebView Delegate Methods- (BOOL)webView:(UIWebView *)webView shouldSt ...
- python数据分析师面试题选
以下题目均非原创,只是汇总 python数据分析部分 1. 如何利用SciKit包训练一个简单的线性回归模型 利用linear_model.LinearRegression()函数 # Create ...
- 协处理器CP15
在基于ARM的嵌入式应用系统中,存储系统通常是通过系统控制协处理器CP15完成的.ARM处理器使用协处理器15(CP15)的寄存器来控制cache.TCM和存储器管理.CP15包含16个32位的寄存器 ...
- 02.lib-v1.js
/* Date: 2014-07-29 4:06:07 [PM] */ function StringBuilder() { this.strings = new Array, this.length ...
- [ActionScript3.0] 深表复制
function clone(obj:Object):Object{ var byteArray:ByteArray = new ByteArray(); byteArray.writeObject( ...
- ubuntu 14.04 安装git server
版本信息 ubuntu : 14.04.1 git version 1.9.1 perl v5.10.1 ssh OpenSSH_6.6.1p1 本次安装的git server使用gitolite实现 ...