问题描述
我一直在使用KiwiTCMS docker镜像安装。最近发生了车祸,机器坏了。我确实有Kiwi docker镜像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指向正确的猕猴桃网络图像
显然不是这种情况,因为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完全相同的旧版本,然后将数据还原到其中。