Migrate a phpBB3 forum to Discourse

넣어 봤는데 아무 차이가 없어요.

이것이 붙여넣기 과정에서 발생한 오류인지, 아니면 yml 파일에서 실제로 그렇게 되어 있는지는 확실하지 않지만, 이런 경우 문제가 발생할 수 있습니다. (일부 주석 끝에 줄바꿈이 있어 주석 처리되지 않은 두 번째 줄이 존재하게 됨)

목록 항목의 들여쓰기가 올바르게 되어 있지 않습니다.

위 내용은 다음과 같이 수정해야 합니다.

  new_categories: 
    - forum_id: general
      name: General

설정 파일을 검증하려면 https://www.yamllint.com/ 사용을 권장합니다.

3개의 좋아요

답변해 주신 모든 분들께 감사드립니다. import 컨테이너 밖에서 settings.yml을 편집하면 실행 중인 설정에 영향을 주지 않는다는 것을 빠르게 파악했습니다. 또한 yml의 공백 문제도 알아내고 설정 파일을 수정했습니다. 어쨌든 phpBB 포럼의 가져오기는 잘 진행되었는데, 단 하나만 빼고요.

제 phpBB 사용자 이름이 Discourse의 관리자 계정과 동일했습니다. 로그인이 되지 않으며, 다음과 같은 메시지가 표시됩니다:

All outgoing email has been globally disabled by an administrator. No email notifications of any kind will be sent.

그 결과, 비밀번호 재설정 이메일을 받을 수 없습니다. 이것이 데이터베이스 설정인가요? 그렇다면 컨테이너의 제한된 리소스를 사용하여 해당 필드를 업데이트할 수 있을까요? 다른 아이디어가 있을까요?

참고로 migratepassword 플러그인은 설치되어 있지만, 작동하지 않는 것 같습니다(비밀번호가 15자 미만이었기 때문일 수도 있습니다).

다음과 같이 rails 콘솔에서 관리자 사용자의 이메일을 활성화할 수 있습니다:

./launcher enter import
rails c
> SiteSetting.disable_emails = "non-staff"

또한 이메일을 사용하지 않고 컨테이너에서 직접 비밀번호를 재설정할 수도 있습니다. 다음을 실행하세요:

./launcher enter import
rake admin:create
3개의 좋아요

이 문서(및 코드)에 몇 가지 변경 사항을 제안해도 될까요?

  • disable_edit_notifications 설정이 더 이상 존재하지 않으므로 더 이상 필요하지 않습니다. 언급된 역할을 수행하는 것은 disable system edit notifications이며 기본적으로 활성화되어 있습니다.
  • 두 SSL 줄은 더 이상 기본적으로 주석 처리되어 있지 않으므로, 이 두 개의 #를 제거하면 발췌문이 실제로 어떻게 보여야 하는지에 더 정확하게 맞을 것입니다.
  • 사용자가 가져오기 시 이 오류를 경험하지 않도록 이 템플릿을 업데이트해야 합니다.

  • 또한 이 부분도 마찬가지입니다(어딘가에서 실수를 한 것이 아니라면, 이것도 수정되어야 할 사항입니다):
    IMPORT=1 bundle install을 실행했을 때 다음이 반환되었습니다:

    [!] There was an error parsing `Gemfile`: You cannot specify the same gem twice with different version requirements.
    You specified: sqlite3 (~> 1.3, >= 1.3.13) and sqlite3 (>= 0). Bundler cannot continue.
    
     #  from /home/root/discourse/Gemfile:249
     #  -------------------------------------------
     #  group :generic_import, optional: true do
     >    gem "sqlite3"
     #    gem "redcarpet"
     #  -------------------------------------------
    

    실제로 sqlite3는 몇 줄 위에서 이미 지정되어 있습니다:

      # NOTE: in import mode the version of sqlite can matter a lot, so we stick it to a specific one
      gem "sqlite3", "~> 1.3", ">= 1.3.13"
      gem "ruby-bbcode-to-md", git: "https://github.com/nlalonde/ruby-bbcode-to-md"
      gem "reverse_markdown"
      gem "tiny_tds"
      gem "csv"
    end
    
    group :generic_import, optional: true do
      gem "sqlite3"
      gem "redcarpet"
    end
    

가져오기에 개발용 설치(dev install)를 사용했습니다. 이것이 영향을 미친다면요.

5개의 좋아요

해당 정보는 설명서나 템플릿에 언급되어야 합니다. 이 문제로 몇 시간을 소요했습니다.

무엇을 적어야 하나요?

이 라인을 삭제하니 컨테이너가 성공적으로 생성되었습니다.

1개의 좋아요

그럼 이 줄을 삭제한 건가요?

1개의 좋아요

네, 그게 해결책이었어요.

1개의 좋아요
4개의 좋아요

“안녕하세요, phpBB 포럼을 Discourse로 성공적으로 마이그레이션했으며, 모든 작업이 순조롭게 진행되었고 현재 포럼도 잘 작동하고 있습니다. 그런데 이제 phpBB 데이터를 FTP로 다운로드할 때 바이너리 모드를 활성화하지 않았다는 사실을 알게 되었습니다. 이로 인해 모든 이미지가 손상되었습니다. 스크립트를 다시 실행해 보았지만 이미지가 덮어쓰기되지 않습니다. 손상된 이미지와 첨부파일을 덮어쓰도록 수정해야 하는 스크립트는 무엇이며, 가능하면 경로까지 알려주실 수 있을까요?”

두 번째 시도에서 Discourse는 이미 uploads 테이블에 존재하는 업로드를 건너뛰고 있습니다. 명시적으로 지시하지 않는 한 Discourse는 기존 업로드를 덮어쓰지 않습니다.

@uploader.create_upload를 호출하기 전에 attachment_importer.rb (discourse/script/import_scripts/phpbb3/importers/attachment_importer.rb at main · discourse/discourse · GitHub)에 아래 코드 스니펫을 추가하면, 동일한 파일명을 가진 기존 업로드가 먼저 삭제되어 Discourse가 해당 파일을 다시 업로드하도록 강제할 수 있습니다.

existing_upload = Upload.find_by(original_filename: filename)
if existing_upload
  existing_upload.destroy
  puts "Deleted existing upload: #{filename}"
end

upload = @uploader.create_upload(user_id, path, filename)
4개의 좋아요

“답변 주셔서 감사합니다. 불행히도 변경 사항이 아무런 효과가 없었습니다. 스크립트는 1분 만에 실행을 완료하지만, 첨부 파일이 덮어쓰여지지 않습니다…”

1개의 좋아요

데이터베이스를 초기화하고 다시 실행해야 할 가능성이 높습니다.

1개의 좋아요

어떻게 하면 될까요?

1단계: SSH를 통해 서버에 연결합니다:

ssh username@server-address

2단계: 애플리케이션 컨테이너에 액세스합니다:

./launcher enter import

팁: docker ps를 실행하여 컨테이너 이름을 찾을 수 있습니다. 기본적으로 app으로 명명되는 경우가 많습니다.

3단계: 데이터베이스를 초기화합니다:

RAILS_ENV=production rake db:reset
3개의 좋아요

Canapin님, 안녕하세요.

가이드의 해당 부분을 업데이트했습니다.

상황에 따라 다릅니다. 로컬호스트용 컨테이너를 설정할 때는 여전히 주석 처리되어 있습니다. 이 가이드는 임포트를 위해 별도의 컨테이너를 사용한다고 가정하며, 이 컨테이너는 인터넷을 통해 접근할 수 없으므로 이 경우 인증서를 구할 필요가 없습니다.

이것에 대한 PR이 이제 코어에 병합되었습니다.

이에 대한 수정 작업을 진행 중이지만, 가이드를 업데이트하고 이 문제를 해결하는 방법에 대한 FAQ를 추가했습니다.

4개의 좋아요

Discourse가 서브디렉터리(예: domain.org/forum)에서 실행되는 경우, 영구 링크(permalinks)가 적용되지 않습니다. 현재 영구 링크는 viewtopic.php?p=XXXX와 같은 형태이지만, 정상적으로 작동하려면 forum/viewtopic.php?p=XXXX와 같이 되어야 합니다.

수년 전부터 이 문제가 있었지만, 아직까지도 우리 환경에서 영구 링크가 제대로 기능하지 않는다는 사실을 최근 발견했습니다. 모든 영구 링크 앞에 URL 경로 요소를 접두사로 붙일 수 있는 GUI 또는 CLI 방법이 있는지, 혹은 이를 수행할 PostgreSQL 쿼리를 누군가가 작성해 줄 수 있을까요? 이 정보가 첫 번째 게시글에 추가되면 다른 사용자에게도 도움이 될 수 있을 것입니다.