使用 Wekan 看板过程中,经常遇到各种问题,本文会不断更新记录使用过程中遇到的所有问题。

常见问题

1. 无法选择成员

表现:选择一个成员后,很快会自动取消选择。控制台会有错误日志,大致内容是无法添加某个值到非数组中。

一开始以为没法添加用户到 cards 的 members 数组中,后来发现原因如下:

由于看板可以配置关注状态,当配置发邮件时,如果产生和自己有关的消息,就会发邮件,发邮件前,会先把邮件内容记录到用户 users 表的 ​​"profile.emailBuffer"​​​ 字段中,经过检查发现数据库中该字段是一个 ​​""​​​ 字符串类型,改为 ​​[]​​ 后即可解决。更新 SQL 如下:

//先查询
db.getCollection("users").find({"profile.emailBuffer":""}, {"profile.emailBuffer": 1});

//后更新
db.getCollection("users").update({"profile.emailBuffer":""}, {$set: {"profile.emailBuffer": []}}, {multi: true});

2. 无法打开看板

表现:点开某个看板后,只能看到顶部菜单,页面主体部分一直显示加载中。

大概参考了 ​​https://github.com/wekan/wekan/issues/1703​​ 这个问题,和我情况比较接近,而且控制台确实会输出一些和自定义字段相关的错误日志。

原因:可能因为在操作 A 看板的卡片配置自定义字段的时候,数据还没有完全同步的情况下,切换到了 B 看板,此时 A 中的卡片使用了 B 中的自定义字段。然后在打开看板的时候就会因为字段的问题导致无法打开看板。

错误数据:

{
"_id": "rASLzx6BcLuW6Ggbc",
"customFields": [
{
"_id": "WQmS8hmAMuxrjuPAi",
"value": "9"
}
],
"listId": "54YHsQgDfh3jGPuti",
"boardId": "GueR77tH9GHdh46hP"
}
//这里的 WQmS8hmAMuxrjuPAi 和当前的看板 id 不一致,数据如下:
// 1
{
"_id": "WQmS8hmAMuxrjuPAi",
"boardId": "LzyPhdepHwQ6CTwHC",
"name": "绩效分数",
"type": "text",
"settings": { },
"showOnCard": true,
"showLabelOnMiniCard": true,
"automaticallyOnCard": true
}

解决办法就是清空这种错误的自定义字段即可,我现在还没发直接用 mongo 脚本查询出有问题的卡片,目前只能人眼识别,然后通过下面的语句更新数据:

//根据看板 id 和 错误字段查询数据
db.getCollection("cards").find({"boardId" : "GueR77tH9GHdh46hP", "customFields._id": "WQmS8hmAMuxrjuPAi"});
//更新错误的数据,直接清空自定义字段
db.getCollection("cards").update({"boardId" : "GueR77tH9GHdh46hP", "customFields._id": "WQmS8hmAMuxrjuPAi"}, {$set: {"customFields": []}}, {multi: true});

3. 部分卡片看不到

特点就是有些人能看到某个卡片,但是大部分人看不到。

原因:未知原因导致 卡片的 泳道ID 变成了 看板 ID。

这个问题发生的比较早,也因为这个问题从 snap 换成了 docker 方式,并且选择了一个比较早的版本。下面直接贴出解决方案。

//查询有问题的卡片
db.getCollection("cards").find({ $where: function() { return this.boardId == this.swimlaneId } } )

解决方法:只能手动找到实际的泳道 ID,然后手动更新有问题的卡片。

如何调试?

在 ​​看板工具 Wekan 安装配置启动和数据备份​​ 这篇博客中,我最终创建了两个 mongo 服务器,主要是为了避免误操作。实际上一个服务器上创建多个数据库也可以,在调试过程中,先备份生产库,然后还原到测试库上,在测试库进行调试!

因为使用的 docker,所以直接启动一个 Wekan 镜像进入 ​​/bin/sh​​(不启动默认命令)。

docker run -it --name=wekan-test -p8888:8080 -p9229:9229 wekanteam/wekan:v2.17 /bin/sh

第一个 8888 端口是 wekan 服务的,第二个 9229 是 nodejs 开启调试模式的默认端口。

进入机子后,​​cd /build​​​ 进入 wekan 的程序目录,​​cat README​​ 查看文档如下:

This is a Meteor application bundle. It has only one external dependency:
Node.js v8.9.3. To run the application:

$ (cd programs/server && npm install)
$ export MONGO_URL=‘mongodb://user:password@host:port/databasename’
$ export ROOT_URL=‘​​​http://example.com​​​’
$ export MAIL_URL=‘smtp://user:password@mailhost:port/’
$ node main.js

Use the PORT environment variable to set the port where the
application will listen. The default is 80, but that will require
root on most systems.

Find out more about Meteor at ​​meteor.com​​.

按照文档设置环境变量,例如我这里:

$ export MONGO_URL='mongodb://10.10.1.245:27019/wekan3'
$ export ROOT_URL='http://10.10.1.245:8888'

以调试方式启动应用:

$ node --inspect=0.0.0.0:9229 main.js

之后在 Chrome 浏览器中,配置服务器 IP:PORT 后就可以调试了。