无法解析路径的行 ID!
相关的错误消息:
- 无法解析路径的行 ID!
- 数据库并发问题: 路径
<PATH>
已与 ShotGrid 实体<ENTITY>
关联。
示例:
当 Toolkit 用户创建文件夹时收到错误“无法解析路径的行 ID!”。
奇怪的是,这会创建 FileSystemLocation 实体,但有时会导致重复项,这可能会导致一系列问题。
完整的错误如下所示:
Creating folders, stand by...
ERROR: Could not resolve row id for path! Please contact support! trying to
resolve path '\\server\nas_production\CLICK\00_CG\scenes\Animation\01\001'.
Source data set: [{'path_cache_row_id': 8711, 'path':
'\\\\server\\NAS_Production\\CLICK\\00_CG\\scenes\\Animation\\01\\001',
'metadata': {'type': 'ShotGrid_entity', 'name': 'sg_scenenum', 'filters':
[{'path': 'sg_sequence', 'values': ['$sequence'], 'relation': 'is'}],
'entity_type': 'Shot'}, 'primary': True, 'entity': {'type': 'Shot', 'id':
1571, 'name': '001_01_001'}}, {'path_cache_row_id': 8712, 'path':
'\\\\server\\NAS_Production\\CLICK\\00_CG\\scenes\\Animation\\01\\001\\Fx',
'metadata': {'type': 'ShotGrid_step', 'name': 'short_name'}, 'primary': True,
'entity': {'type': 'Step', 'id': 6, 'name': 'FX'}}, {'path_cache_row_id':
8713, 'path':
'\\\\server\\NAS_Production\\CLICK\\00_CG\\scenes\\Animation\\01\\001\\Comp',
注意:它的运行时间可能比这长得多。
导致错误的原因是什么?
此错误指出,工作流配置中的 ShotGrid(“站点偏好设置 -> 文件管理”(Site Preferences -> File Management))和 config/core/roots.yml
中指定的存储根之间不匹配。
这通常是由于运行 Windows 的工作室中的大小写不匹配而导致的。它们的路径不区分大小写,但我们的配置区分大小写。像 E:\Projects
与 E:\projects
这样简单的差异都可能会导致此错误。
在后台发生了什么?
代码在 ShotGrid 中为刚创建的路径创建了 FilesystemLocation 实体,使用 ShotGrid 的存储根来确定路径的根。然后,它在本地缓存中创建相同的条目,并且必须确定将其放置在数据库中的哪个位置。对于本地缓存,它使用 roots.yml
确定路径的根,并且由于大小写不匹配,它生成的路径与刚在 ShotGrid 中输入的路径不匹配。此时,它将引发错误。
这尤其糟糕,因为错误不清晰:创建了文件夹,创建了 FilesystemLocation 条目,它们没有在本地缓存路径中同步,由于存储根不匹配,它们也无法同步。
如何修复
首先,确保“站点偏好设置”(Site Preferences)中的存储根路径与 config/core/roots.yml
中的路径相匹配。要修复不匹配问题,就应该在后续的文件夹创建调用中消除错误。
然后,清除错误的 FilesystemLocation 实体。如果可以缩小到一组错误的 FilesystemLocation 实体,只需移除这些实体即可。但是,在许多情况下,项目的所有路径都会受到影响,因此它们都需要处理。
- 如何清除 FilesystemLocation 实体:理想情况下,您可以运行
tank unregister_folders
。要清除所有这些,请运行 tankunregister_folders --all
。(对于tank unregister_folders
的所有选项,只需运行它而不使用任何参数,它将输出用法说明。) - 但是,由于数据库已处于不稳定状态,因此这可能不起作用,或者可能仅部分起作用。运行该命令后,返回到 ShotGrid 中的 FilesystemLocations,确认您预期删除的内容已消失。如果没有,请选择坏实体,然后手动将其移动到垃圾桶。
此时,ShotGrid 中的 FilesystemLocations 是干净的,但艺术家的本地缓存可能不反映您所做的更改。最后一步是实际同步每个用户计算机上的本地缓存。为此,应运行 tank synchronize_folders --full
。
执行所有这些步骤后,缓存路径应处于良好状态,并且不再显示错误。