原文下载:http://drupal.org/Troubleshooting-FAQ
如果你在使用Drupal的过程中遇到了问题, 放心, 你绝对不是一个人. 你遇到的问题很可能已经被别人提出回答过很多次了. 为了节省你的时间, 在你提出一个问题等待别人回答之前, 先看看FAQ列表吧.
- 如果在这里没找到答案, 你可以查找整个Drupal网站.
- 这样还没有得到答案, 你可以在支持论坛中寻求帮助, 或者学习使用IRC, 然后在IRC的#drupal-support频道中提出你的问题.
- 至于其他常见问题, 参考Drupal 常见问题.
Drupal 故障排除指南
1. 停下手头的工作, 思考
- 你刚才对站点做过任何更改吗? 例如安装或升级module.
- 你安装的module和你的Drupal版本匹配吗? 例如, Drupal 7的Views在Drupal 6上是不工作的.
2. 阅读错误信息. 这取决于你怎样设置错误信息的展示, Drupal式的详细错误信息可能会出现在页面上. 当core dblog module启用的时候, 你可以在/admin/reports/dblog中找到错误报告. 在调试模式下, 你也可以查找非Drupal日志, 例如Apache, PHP等等. 你的主机提供商可以帮助你找到这些日志.
错误可能包括:
- .htaccess 配置错误 - "Internal server error" - 500 错误 这里不允许出现指令
- 内存问题 - Fatal error: Allowed memory size of 8388608 bytes exhausted
- Javascript问题 - modules/troublesome/utility.js 404 没找到
3. 检查你的页面
不完整的HTML标记和结构问题可能让你的站点主题产生问题, 例如对齐问题, 错误的字体大小, 溢出的块等等. 在你调试你的站点的时候, 查看每条错误信息, 鉴定出错误出现在那里, 解决它是不是重要的. 你可能不会解决掉所有完整性问题, 但你应该找到他们为什么存在.
4. 检查你站点的CSS
站点的样式问题可能由CSS覆盖引起. 如果你对CSS还不熟悉, 那你的第一步应该是了解更多cascading. 一旦你熟悉了CSS, 寻找子元素和容器元素可能产生的问题. 特别的, 一个元素的外边距可能是另一个元素的内边距(尤其是在列表元素中). 另外, 当你需要为你的站点重写CSS的时候, 在你的主题中新建一个style.css文件, 不要改变core版本的文件.
你可以使用以下工具检查你的代码:
- FireBug - 在Firefox中
- Web Developer Toolbar - 在Firefox和Chrome中
- DOM inspector - 在IE中
5. 清除Drupal的缓存
为了提高页面速度, Drupal为请求资源建立了缓存. 当Drupal响应你的一个页面请求时, 它可能包含了一个旧版本的页面, 没有你最近做的变更. 为了定位这样的问题, 你可以清除Drupal所有的缓存, 得到最新生成的页面.
- Drupal 6: 点击"Clear all caches"按钮在/admin/settings/performance最下方.
- Drupal 7: 点击"Clear all caches"按钮在admin/config/development/performance最上方.
6. 阅读你的Module的README
一个module的README.txt通常都包含了:
- 大体信息和作者的建议
- 这个module依赖什么(例如主机PHP扩展)
- 要求
- 安装说明
- 注意事项(例如module冲突和补丁)
7. 搜索你得到的错误
由于Drupal现在的普及度, 很可能已经有人遇到过你所遇到的问题了. 使用Google搜索你得到的所悟信息. 在搜索的时候, 确认去掉错误信息中那些具体的本地或主机环境信息. 在搜索关键词前面加入"drupal", 可以帮助你得到更精确的结果. 例如, Google: "Argument #1 is not an array" drupal.
8. 深入代码确认SQL错误
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(n.nid), n.title FROM category c INNER JOIN category_node r ON c.cid = r.cid INN' at line 1 ... in /var/www/html/doadance/drupal/includes/database.mysql.inc on line 120.
这样的错误一般来说, 绝对不是Drupal引起的. 他们通常是一些贡献的module发送槽糕的指令给Drupal的结果. 调试的时候, 尝试找到错误信息中的数据库表, 使用这张表的module最可能是罪魁祸首. 在这个例子中, 就很像是category闯的祸. 然而, 也可能是另一个module尝试去直接访问目录数据.
9. 调试Module中的代码
找到问题根源的最好的办法通常是打印出所有涉及到的代码. 如果你还没有安装Devel module, 你最好马上安装一个. 下面是一个怎样一步一步找到和调试错误的例子:
warning: in_array() [function.in-array]: Wrong datatype for second argument in /home/httpd/global/drupal/modules/node.module on line 1303.
- 到node.module的1303行去. 你将要修改这个文件, 所以最好还是先备份, 或者确认你的文件版本是最新的.
- 在1303行, node.module找到in_array('status', $node_options).
- 在这行之前插入代码: print("Node options are : '" . print_r($node_options, 1) . "'");.
- 查看输出信息, 确认这个错误的数据类型是怎么来的.
10. 使用容易得到答案的方式提问
当你在Drupal论坛中提交问题时, 记住用聪明的方式提问. 当你的问题解决了的时候, 确认在这个线程里同步一下.
11. 找出带给你麻烦的那个Module
当你发现是某个module引起的问题的时候, 打开这个module的.module文件. module的客户化页面一般在hook_menu()中定义的. 大多数module在url中就可以辨认出来, 然后确定这个module是提供内容的, 最后寻找使用hook_menu()的代码和.module文件.