Docker部署Odoo开发实例时filestore缺失问题求助
问题描述
在Docker容器中搭建新的Odoo开发实例,使用外部生产实例的数据完成数据库迁移后,启动时出现附件文件找不到的错误。
已执行的数据库迁移步骤:
sudo docker cp dump.sql db_docker_name:/dump.sql sudo docker exec -it --user postgres db_docker_name /bin/bash psql database_name < dump.sql ALTER DATABASE database_name OWNER TO odoo; sudo docker exec docker_name pip3 install xmlschema # 及其他依赖
启动后报错信息:
2022-10-17 08:10:29,024 1 INFO dblive odoo.addons.base.models.ir_attachment: _read_file reading /var/lib/odoo/filestore/dblive/6a/6ad87633490735f27b4f73d8d984193d8d7d6947 Traceback (most recent call last): File "/usr/lib/python3/dist-packages/odoo/api.py", line 789, in get field_cache = field_cache[record.env.cache_key(field)] KeyError: (None, None) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/lib/python3/dist-packages/odoo/fields.py", line 970, in __get__ value = env.cache.get(record, self) File "/usr/lib/python3/dist-packages/odoo/api.py", line 793, in get raise CacheMiss(record, field) odoo.exceptions.CacheMiss: 'ir.attachment(52,).datas' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/lib/python3/dist-packages/odoo/api.py", line 789, in get field_cache = field_cache[record.env.cache_key(field)] KeyError: (None,) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/lib/python3/dist-packages/odoo/fields.py", line 970, in __get__ value = env.cache.get(record, self) File "/usr/lib/python3/dist-packages/odoo/api.py", line 793, in get raise CacheMiss(record, field) odoo.exceptions.CacheMiss: 'ir.attachment(52,).raw' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_attachment.py", line 102, in _file_read with open(full_path, 'rb') as f: FileNotFoundError: [Errno 2] No such file or directory: '/var/lib/odoo/filestore/dblive/6a/6ad87633490735f27b4f73d8d984193d8d7d6947'
容器内filestore/dblive目录内容:
odoo@95198003ea0a:~/filestore/dblive$ ls 16 18 86 checklist d0 e7 fa
解决方案
报错核心是数据库中记录的附件文件未同步到开发容器的filestore目录,仅迁移数据库不足以完整复制Odoo实例数据,必须同步filestore目录。按以下步骤操作:
从生产实例同步filestore目录到本地
假设生产实例的filestore路径为/var/lib/odoo/filestore/dblive,用scp复制到本地:scp -r user@生产服务器IP:/var/lib/odoo/filestore/dblive ./local-filestore将本地filestore上传到开发容器
用docker cp将目录复制到容器对应的路径:sudo docker cp ./local-filestore docker_name:/var/lib/odoo/filestore/修正容器内filestore的权限
确保Odoo用户拥有目录读写权限:sudo docker exec -it docker_name chown -R odoo:odoo /var/lib/odoo/filestore/dblive重启Odoo容器
sudo docker restart docker_name
如果生产实例也是Docker容器,可直接在容器间复制:
sudo docker cp 生产容器名:/var/lib/odoo/filestore/dblive ./local-filestore sudo docker cp ./local-filestore 开发容器名:/var/lib/odoo/filestore/
内容的提问来源于stack exchange,提问作者Pypax
相关产品推荐
相关产品推荐

