kiwi-tcms - KiwiTCMS 恢复 json 备份文件失败,并出现“问题安装夹具 '-' 错误”
问题描述
我一直在使用 KiwiTCMS docker 镜像安装。最近发生了车祸,机器坏了。我确实有 Kiwi docker image 6.11 和相同图像的备份。
使用命令进行备份:
docker exec -it kiwi_web /Kiwi/manage.py dumpdata --all --indent 2 > database.json
KiwiTCMS 与
docker-compose up -d
现在,当尝试使用序列恢复备份时(docker-compose.yml 指向正确的 kiwi-web 映像,SQL 指向 kiwi-db 5.5 mariadb 映像),出现错误
# docker-compose up -d
# docker exec -it kiwi_web /Kiwi/manage.py migrate
# cat database.json | docker exec -i kiwi_web /Kiwi/manage.py loaddata --format json -
错误:
Traceback (most recent call last):
File "/venv/lib/python3.6/site-packages/django/db/models/options.py", line 565, in get_field
return self.fields_map[field_name]
KeyError: 'execution'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/venv/lib/python3.6/site-packages/django/core/serializers/json.py", line 69, in Deserializer
yield from PythonDeserializer(objects, **options)
File "/venv/lib/python3.6/site-packages/django/core/serializers/python.py", line 118, in Deserializer
field = Model._meta.get_field(field_name)
File "/venv/lib/python3.6/site-packages/django/db/models/options.py", line 567, in get_field
raise FieldDoesNotExist("%s has no field named '%s'" % (self.object_name, field_name))
django.core.exceptions.FieldDoesNotExist: LinkReference has no field named 'execution'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/Kiwi/manage.py", line 12, in <module>
execute_from_command_line(sys.argv)
File "/venv/lib/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
utility.execute()
File "/venv/lib/python3.6/site-packages/django/core/management/__init__.py", line 375, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/venv/lib/python3.6/site-packages/django/core/management/base.py", line 323, in run_from_argv
self.execute(*args, **cmd_options)
File "/venv/lib/python3.6/site-packages/django/core/management/base.py", line 364, in execute
output = self.handle(*args, **options)
File "/venv/lib/python3.6/site-packages/django/core/management/commands/loaddata.py", line 72, in handle
self.loaddata(fixture_labels)
File "/venv/lib/python3.6/site-packages/django/core/management/commands/loaddata.py", line 114, in loaddata
self.load_label(fixture_label)
File "/venv/lib/python3.6/site-packages/django/core/management/commands/loaddata.py", line 172, in load_label
for obj in objects:
File "/venv/lib/python3.6/site-packages/django/core/serializers/json.py", line 73, in Deserializer
raise DeserializationError() from exc
django.core.serializers.base.DeserializationError: Problem installing fixture '-':
我该如何继续以某种方式保存备份的数据?
非常感谢,-米卡
解决方案
FieldDoesNotExist:LinkReference 没有名为“执行”的字段
好吧,这告诉你你的错误是什么!您正在尝试将数据库转储从 6.11 版本恢复到更高版本,这将无法正常工作,因为同时数据库架构中存在 [可能多次] 更改。
docker-compose.yml 指向正确的 kiwi-web 图像
显然不是这种情况,因为LinkReference.execution
字段出现在 7.0 版本中,请参阅https://kiwitcms.readthedocs.io/en/latest/changelog.html#id108
回顾一下:
- 您正在尝试从旧(或新)版本的 Kiwi TCMS 恢复数据库转储,而应用服务器正在运行不兼容的版本。这行不通。
- 确保您的 docker-compose.yml 使用的是 Kiwi TCMS v6.11 而不是
latest
您的选择:
- 找出哪些字段已更改(您的 json 转储来自哪个版本)并修改 JSON 结构以匹配 - 耗时且容易出错
- 让自己使用完全相同的旧版本 Kiwi TCMS,然后将数据恢复到上面。
推荐阅读
- sql - T-SQL:WHERE <> 返回错误结果
- r - 如何为 data.table 中的左连接创建匹配标志
- android - Android Studio 找不到 com.jakewharton:butterknife-compiler:5.1.2
- javascript - Diamond-Square 实现产生过高的值
- reactjs - 如果日期是该月的最后一天,则在 d3 折线图中无法看到月份名称
- mysql - 协助 MySQL 'LIKE' 语句
- reactjs - 在循环内为变量赋值 - Express.js
- java - 如何从计算机上的文件中打印和删除整数
- lxc - 实时备份 lxc 容器
- ios - 离子键盘不显示附件栏