드루팔 메이저 업그레이드시 CCK Field 요소의 비표시 문제

드루팔 메이저 업그레이드시 CCK Field 요소의 비표시 문제

[현상]
최근에 몇몇 사이트의 드루팔을 5.x에서 6.x로 업그레이드하고 있다.
이런 메이저 업그레이드는 문제를 많이 유발하기 마련인데...
드루팔 폴더의 UPGRADE.txt에 정리된 순서로 하면 별 큰 문제없이 진행돼
다시 한번 더 드루팔의 체계성에 놀랐다. 그런데...
한 사이트에서 emfield (Embed Media Field)를 이용한 동영상들이
업그레이드 후에 전부 보이지 않는 것이다.
update.php 로 야무지게 DB 스키마를 정리했건만 아무리 해도 안된다.

[원인]
드루팔 본향 사이트(drupal.org)에서 이와 비슷한 현상을 많이들 겪고 있었다.
여러가지로 원인진단/처방책이 제각각인지라 정리하기가 어려웠다.
그 중 아래 세 글이 가장 참고가 됐다.

http://drupal.org/node/286474#comment-934685
http://drupal.org/node/360748#comment-1234562
http://drupal.org/node/360748#comment-1241309

요약컨대 드루팔의 메이저 업그레이드에 따른 update.php 를 이용한
DB 스키마의 업그레이드를 **완전히** 믿을 수는 없다는 것이다.
각 마이너 업그레이드 버전에 따라 스키마의 변경이 있는데 이것이
순차적으로 기존 DB 테이블에 잘 적용될 지는 미지수라는 것이다.
(안타깝게도 시간이 부족해 그 자세한 내막을 더 조사할 수 없었다)

다행히도 이러한 update.php 로 인한 DB 스키마 업그레이드 실패는
드문 현상이다. 하지만 이번 메이저 업그레이드(D5->D6)에서
CCK 역활을 하는 emfield, emvideo, imagefield 등의 많은 부속 모듈들이
본의 아니게 피해를 입었다. 해결책이 없는 것은 아니다. 바로 수동 업데이트다.

[해결책]
본 해결책은 DB에 능숙한 운영자를 통해 실시할 것을 권한다.
(조작 실수로 큰 사고를 유발할 수 있다)
우선 아래 두 테이블을 백업한다.
CCK 관련 모듈로 새로이 지정한 컨텐츠 필드 정의 테이블이다.

content_node_field
content_node_field_instance

이후에 각 모듈에 따라 다음과 같이 변경한다.
(주의 : 각 레코드의 속성에 따라 적절히 사용해야 한다. 무조건 적용하면 곤란.
예를 들어 image인지 video인지, 그리고 textfields 등도 고려...)

content_node_field 테이블
active: "0" --> "1"
type: "image_ncck" --> "emimage"
type: "video_cck" --> "emvideo"

content_node_field_instance 테이블
widget_type: "image" --> "imagefield_widget"
widget_type: "video_cck_textfields" --> "emvideo_textfields"
widget_module: "" --> "imagefield" *(이건 저절로 반영되는 듯)
widget_module: "" --> "emvideo" *(이건 저절로 반영되는 듯)
widget_active: "0" --> "1"

그리고 나서 확실히 하기 위해 다시 한번 더 update.php를
관리자 권한으로 돌리자. 이제 컨텐츠 필드들이 제대로 보일 것이다.

[재발방지책]
특별히 없다. 나중에 Drupal 6에서 7로 메이저 업그레이드할 때에도
비슷한 현상이 생길까? 그러지 않기를 바란다.

Your rating: None 평균 : 4 (1 vote)