故障排查¶
工具不开始导出¶
| 提示信息 | 含义 |
|---|---|
give --db-url, or set RT_DATABASE_URL |
没有指定数据库。 |
--db-url is not a database URL |
URL 无法解析。请写成 postgresql://USER:PASSWORD@HOST:PORT/DATABASE,密码中的特殊字符要做百分号编码。 |
--db-url names a ... database |
只能读取 PostgreSQL、MySQL 和 MariaDB。不支持运行在 Oracle 或 SQLite 上的 RT。 |
the following arguments are required: --instance |
需要为这套 RT 安装取一个名字,见 导出。 |
No queue 'X' in RT |
--queue 指定的队列在 RT 中不存在。请给出队列的准确名称或 id。 |
this database has no RT tables |
URL 指向的不是 RT 的数据库。 |
this is an RT older than 4.4 |
请先用 RT 自带的升级工具把 RT 升级到 4.4 或更高版本。 |
... already exists: choose a new path |
--out 指向了一个已完成的导入包,或一个含有其他文件的目录。请换一个新路径。 |
--external-storage-path ... is not a directory |
RT 外部存储的路径不正确。 |
--timezone ... is not a time zone name |
请使用 Asia/Bangkok、Europe/Berlin 这样的时区名称。 |
导出失败¶
出现 export failed: ... 且退出状态为 1,表示导出未能完成;提示信息会说明原因(密码绝不会显示)。常见原因:
- 连接被拒绝、超时、认证失败。 检查主机、端口和账户,并确认运行工具的机器能访问数据库端口。在 MySQL 上,该账户必须允许从运行工具的机器连接(
'rt_export'@'%',或该机器的地址)。 - 长时间导出中连接被断开。 再运行一次同样的命令,它会替换掉未完成的导入包。可以改从副本库导出,或把数据库的空闲超时调到足够长。
- Permission denied for table ...:账户无法读取 RT 的某张表。请对所有 RT 表授予
SELECT权限。
附件缺失¶
清单(manifest)会说明缺失的数量和原因:
- files in RT's external storage, not read:请提供
--external-storage-path(Disk 后端),或先把文件从其他后端复制成 Disk 后端的目录布局。见 导出。 - files missing from RT's external storage:给出的目录不是该后端的根目录,或者目录中缺少文件。每个文件位于
<root>/<3 hex>/<3 hex>/<rest of the SHA-256>。 - files that could not be decoded:RT 中的内容已损坏。消息本身的记录仍会被迁移。
文本显示不正确¶
- 旧消息中出现乱码(
ภาษา):RT 保存这些内容时所用的字符集,与消息部分声明的字符集不一致。工具会先按 UTF-8 尝试,再按声明的字符集尝试,除此之外没有其他依据。 - 在 MySQL 上,所有非拉丁字符都变成
?:数据库里存的本来就是问号,这是 RT 曾经向latin1表写入数据造成的。请在 RT 中核实,工具无法恢复这些字符。 - 导入包中的纯文本出现反斜杠(
\*、\#):这是 Markdown 防止字符被解析为格式标记的写法。Specivo 显示的仍是原始文本。 - 某个数字变成了不该有的链接,或者反过来:参见 引用 中的规则。单独的
#123只有在加上--link-hash-numbers时才会生成链接。
状态或优先级与 RT 中显示的不一致¶
- 工具会列出 RT 数据库中没有任何生命周期描述的状态,并按名称归类。请用
--status-category-map指定它们。在 RT 4.4 上,除 RT 默认生命周期以外的所有生命周期都属于这种情况。 - 优先级名称来自 RT 5.0 和 6.0 的数据库设置,或 RT 的默认值(Low、Medium、High)。只在
RT_SiteConfig.pm中设置的名称无法读取,此时数字会保留在每个工作项的extra中。
Specivo 报告警告¶
| 警告 | 处理方式 |
|---|---|
工作项上的 external_ref |
引用或链接指向了同一 RT 另一个导入包中的工单。请用 --continue-import 把那个导入包也加载进来。 |
| 用户没有邮箱地址 | 在 RT 中没有邮箱的用户,在 Specivo 中会得到一个占位地址。 |
| 账户未激活 | RT 中的非特权用户和已禁用用户,导入后处于锁定状态。 |
| 登录名已被占用 | Specivo 会加上后缀,并把它列出来。 |
再运行一次¶
导出不会修改 RT,重复导出始终是安全的。只要 --instance 相同,重复加载同一个导入包不会重复创建已存在的内容。