phpBB에서 가져오기

안녕하세요, 오래된 phpBB2 포럼을 새로운 Discourse로 가져오려고 하고 있습니다.

문서에 나와 있듯이 phpBB2에서 phpBB3로의 예비 가져오기를 수행했습니다.

아바타 가져오기(가져오기 안 됨)와 비밀번호에서 문제가 발생했습니다. 분명히 Discourse는 phpBB2와 다른 암호화 방식을 사용할 것입니다. 그래서 첫 로그인 시 비밀번호가 phpBB2 방식으로 암호화되었는지 확인하고, phpBB2 암호화(md5?)로 비밀번호가 저장된 해시와 일치하는지 확인한 후 Discourse 암호화로 다시 기록하는 코드를 작성하는 것을 고려하고 있었습니다.

보통 “좋은 옛날” PHP와 mySql이라면 반 시간이면 끝나는 일이지만, Discourse에서는 소스를 수정하기 시작할 곳조차 알지 못하겠습니다. 제 오래된 phpBB2는 크게 수정되어 있었습니다(이런 이유로 phpBB3로 업데이트하지 않았습니다). 하지만 이것이 좋은 습관이 아니라는 것을 알며, Discourse를 엉망으로 만들고 업데이트 자동화 기능을 잃고 싶지 않으므로 제 필요를 어떻게 관리할 수 있는지 문의합니다. 플러그인을 개발해야 하나요? 새로운 “베타” 버전에서 이 기능을 얻을 가능성이 있을까요?

감사합니다

비밀번호를 가져오려면 Migrated password hashes support 플러그인이 필요합니다. 이로 인해 비밀번호 문제를 해결할 수 있을 것입니다.

아바타 문제가 데이터 호환성 때문인지, 아니면 스크립트를 올바르게 설정하지 않았기 때문인지는 단정하기 어렵습니다.

힌트 주셔서 감사합니다. 최대한 빨리 시도해 보겠습니다. 아바타와 관련해서는 가이드에 있는 모든 단계를 두 번 확인했지만, 여전히 성공하지 못했습니다. 다만, 가져오기를 다시 반복해야 하므로 각 단계를 주의 깊게 살펴보고 결과를 알려드리겠습니다.

이 주제의 소유자는 아니지만, 기본적으로 같은 여정을 겪고 있어서 연결하고 싶어요.

현재 import_phpbb3 플러그인으로 작업 중인데, 사용자 생성 단계에서 이미 몇 가지 문제를 겪고 있습니다. 사용자 아바타도 함께 마이그레이션하고 싶은데, 모든 사용자에게 정상적으로 작동하지 않는 것 같습니다. 일부 사용자는 다음과 같은 오류가 발생합니다.

Failed to upload avatar for user myuser: /shared/import/data/images/avatars/upload/phpbb_avatar_2.png
#<ActiveModel::Errors:0x00000055a4b3de78 @base=#<Upload id: nil, user_id: nil, original_filename: "avatar.png", filesize: 0, width: nil, height: nil, url: nil, created_at: nil, updated_at: nil, sha1: nil, origin: nil, retain_hours: nil, extension: nil, thumbnail_width: nil, thumbnail_height: nil, etag: nil, secure: false, access_control_post_id: nil, original_sha1: nil, animated: nil, verification_status: 1, security_last_changed_at: nil, security_last_changed_reason: nil>, @errors=[#<ActiveModel::Error attribute=base, type=Sorry, the image you are trying to upload is too large (maximum dimension is 80-megapixels), please resize it and try again., options={}>]>

문제가 PNG 파일 형식 때문인 것 같습니다. PNG 파일도 가져올 수 있는 방법이 있거나, GIF/JPG 형식으로 변환해야 하나요? oxipng는 이미 설치되어 있습니다.

root@DietPi4-import:/var/www/discourse# which oxipng
/usr/local/bin/oxipng
root@DietPi4-import:/var/www/discourse#

비밀번호 플러그인에 관해서는, 가져오기 컨테이너를 구축하는 과정의 일부로 활성화해 두었습니다. Discourse 컨테이너에서도 별도로 활성화해야 하는 건가요? 이 기능이 정상 작동하는지 확인하는 방법이 있거나, 사용자가 직접 시도해 봐야 하는 건가요?

미리 감사드립니다.

migrate password 플러그인은 마이그레이션이 완료된 후 포럼에서만 활성화하도록 설계되었습니다. 그렇지 않으면 사용자 가져오기 과정에서 오류가 발생할 수 있습니다.

정상적으로 작동하는지 확인하려면 플러그인을 활성화한 후 기존 비밀번호로 로그인해 보세요.

피드백 감사합니다 @Canapin
이 경우, import 컨테이너에서 가져오기가 완료된 후, 프로덕션 컨테이너를 재시작하기 전에 다시 빌드하겠습니다.

참고로: 관리자 팀에서 제 첫 번째 게시물을 확인해 주실 수 있을까요? 너무 많이 수정해서 스팸으로 표시된 것 같습니다 :smiley:

PNG 파일 가져오기가 작동하지 않는 이유에 대해 아는 분이 있을까요?

더 자세한 정보가 도움이 될 것 같습니다. 어떤 버전의 phpBB를 사용 중인가요? 오류 메시지는 없나요?
"동작하지 않는다"는 부분을 좀 더 구체적으로 설명해 주실 수 있나요?

위에서 이미 공유했습니다. 대부분의 값이 nil인 것으로 보아, 가져오기 스크립트가 PNG 파일을 올바르게 읽지 못하는 것 같습니다.

아, 죄송합니다. 이미 이슈를 게시하신 걸 못 봤네요. 죄송하지만 제가 도와드리기 어렵습니다. 필요한 기술이 없거든요.

수정: (제 작은 "실수"를 방지하기 위해, 본인에게 보낸 첫 번째 메시지를 제가 볼 수 있도록 스스로 답글을 달아두셨으면 좋았을 텐데요)

마이그레이션 중에 가끔 이런 현상을 보게 되는데, 영향을 받은 파일들은 일반적으로 파일 형식이 알려지지 않아서 이미지 뷰어로 열 수 없습니다. 저는 항상 그런 파일들이 수년에 걸쳐 손상된 것이라고 가정하고 있습니다.

수입하려고 하는 PNG 파일이 유효한 이미지 파일인지 확인해 보셨나요? 그렇다면 예시를 공유해 주실 수 있나요? 또한, Docker 컨테이너 내에서还是在 개발 환경에서 가져오고 계신가요?

요약: Linux 환경으로 이미지를 전송하는 과정에서 파일이 손상되었습니다.

@gerhard 제 PNG 파일이 유효하고 정상 상태라고 100% 확신했습니다. Windows 컴퓨터에서 정상적으로 열 수 있었기 때문이죠. 하지만 님의 조언 덕분에 올바른 방향으로 나아갈 수 있었고, Linux 환경에서 PNG 파일의 상태를 확인해 보았습니다. 님의 말씀이 정확했습니다. 모든 PNG 파일이 손상되어 있었습니다. 원인은 파일 전송 방식이었습니다. SCP(WinSCP)를 사용하여 전송했는데, PNG 파일이 텍스트 파일로 전송되면서 손상이 발생했습니다. 새로운 시도에서는 모든 파일을 7z 아카이브로 압축하여 전송한 뒤, Linux 환경에서 바로 압축을 해제했습니다. 이번에는 문제가 없이 정상적으로 가져오기(import)가 완료되었습니다.

정확한 방향을 알려주신 데 대해 진심으로 감사드립니다 :+1:

현재 게시물의 99.9%에 대해 가져오기가 정상적으로 작동하고 있지만, 한 가지 더 질문이 있습니다. solved topics(해결된 주제) 상태 정보도 함께 전송할 수 있는 방법이 있을까요? 새로운 프로덕션 포럼에서는 discourse-solved 플러그인을 사용할 계획입니다. 기존 상태 정보를 새로운 환경으로 어떻게 이전해야 할까요?

다시 한번: 도움 주셔서 정말 감사합니다.

phpBB에서 해결됨 상태가 있다는 사실은 알지 못합니다. 이것이 확장 프로그램/모듈인가요? 가져오기 스크립트를 커스터마이즈해야 가져올 수 있을 것 같습니다.

phpbb 데이터베이스를 살펴본 결과, 주제/게시물이 해결되었음을 나타내는 정보를 저장하는 필드를 찾았습니다. 이제 Discourse 데이터베이스에서 이를 어떻게, 어디에 저장해야 하는지 알아내야 합니다. :roll_eyes:

그 기능을 지원하는 다른 import 스크립트를 참고해 보세요(아마 "solved"라고 검색하면 찾을 수 있을 겁니다). import 인스턴스에 해당 플러그인이 설치되어 있어야 합니다.

답변해 주셔서 감사합니다. 하지만 제 역량 범위를 벗어나는 것 같습니다.

소스 phpbb 데이터베이스에서는 주제를 해결한 게시글 ID가 다음 위치에 저장됩니다.

  • phpbb_topics.topic_solved.

Discourse에서는 이 정보가 3개의 다른 필드에 저장됩니다(제가 잘못 알고 있는 것이 아니라면).

  • post_custom_fields.is_accepted_answer
  • topic_custom_fields.accepted_answer_post_id
  • topic_custom_fields.solved_auto_close_topic_timer_id

제가 이해한 바로는, topic과 post의 ID가 변경되므로 가져오기 과정에서某种 매핑이 수행되는 것 같습니다.

하지만 제 지식은 여기까지입니다.

그렇다면 수정 및 디버깅 방법을 설명하는 것은 여기서 달성할 수 있는 범위를 벗어날 가능성이 높습니다. 예산이 있으시다면 #marketplace에 게시하거나 저에게 연락해 주세요.

import_id라는 커스텀 필드에 저장되며, 코드에서 볼 수 있듯이 조회를 수행할 수 있는 함수들이 있습니다. topic_id_from_import_id()와 같은 함수를 사용할 수 있습니다.

제안해 주셔서 감사합니다. 저희는 실질적인 예산이 없는 아주 작은 오픈 소스 프로젝트입니다. 처음에는 “주제 해결” 기능이 phpbb의 비표준 확장이라는 사실을 알지 못했습니다(포럼이 생성된 지 몇 년 후에 가입했기 때문이죠) 그리고 쉽게 수정할 수 있을 것이라 생각했습니다. 하지만 이것이 개별적인 요청이며, 살펴보는 데 시간이 걸린다는 것을 이해했습니다.

거의 완벽하게 작동하도록 도와주신 여러분께 다시 한번 감사드립니다.

아, 참고로 phpbb는 3.3.5 버전에서 마이그레이션되었습니다. 비공식적으로 지원되긴 하지만 잘 작동하고 있었습니다.

디스코스에 어떤 테이블이 관련되어 있는지 파악할 수 있다면, 다른 가져오기(importer)에서 몇 줄의 코드를 복사해 올 수도 있을 것입니다.

알겠습니다. phpbb의 게시글/토픽 ID를 Discourse의 게시글/토픽 ID와 매핑하는 것이군요.

이것은 accepted answers(채택된 답변)를 가져오기 위한 좋은 예시인 것 같습니다: discourse/script/import_scripts/lithium.rb at 44f7a61c2c5b6f248a62ab7f987ebbd3091c71ef · discourse/discourse · GitHub

제가 이해한 대로, 첫 단계로 phpbb_topics.topic_solved 값을 postgres에 저장/가져와야 하는 것이 맞나요?