bbPress 이미지와 링크를 Discourse로 301 리다이렉트하는 방법?

안녕하세요,

bbpress.rb 스크립트를 사용하여 bbPress의 모든 콘텐츠를 Discourse "개발 환경"으로 이전하는 데 성공했습니다.

하지만 도움을 요청드리고 싶은 질문이 두 가지 있습니다:

1: 모든 이미지가 Discourse에서 “/wp-content/uploads/img_644e48aedc2bf.jpg” 경로로 표시됩니다. 이는 bbPress 미디어 URL 경로와 동일한데, 이미지도 함께 가져와서 Discourse에서 예상되는 경로로 이동시킬 수 있는 방법이 있을까요?

2: 제 bbPress 기본 영구 링크(permalink)는 "www.demo.com/%postname%/" 형식이었으며, bbPress는 SQL에서도 "www.demo.com/?p=123" 형태의 영구 링크를 사용합니다. bbpress.rb 코드를 어떻게 수정해야 하는지 궁금합니다. 이전 링크를 가져와서 나중에 문제가 없이 새로운 Discourse 링크로 301 리다이렉트할 수 있도록 하는 방법을 알려주세요.

즉, 사용자가 이전 사이트

www.demo.com/%postname%/

을 방문하려고 하면, 링크가 새로운 주소

"https://my-discoursexxxx.com/t/1234/%postname%"

로 301 리다이렉트되도록 하는 것입니다.

이 질문들에 대해 도움을 주실 수 있을까요?

안녕하세요,

1번의 경우, bbpress 스크립트를 수정하여 폴더에서 아바타를 복사하고 Discourse 인스턴스에 업로드해야 합니다. 이를 어떻게 달성할 수 있는지에 대한 아이디어는 vbulletin 가져오기 스크립트의 212번 줄을 참고하시면 됩니다.

2번의 경우, Discourse가 외부 웹사이트의 데이터(예: http://www.demo.com)에 액세스할 수 없기 때문에 실제로는 좀 더 복잡합니다. 따라서 이를 달성하는 가장 좋은 방법은 동일한 도메인을 유지하고, postname 파라미터를 지원하도록 create_permalinks 함수(379번 줄)를 약간 수정하는 것입니다.

게시물 내에서 말씀하시는 것이라면, download remote images to local 옵션이 설정되어 있다면 Discourse가 이미지를 다운로드합니다. 이를 수행하기 위해 실행되어야 하는 sidekiq 작업이 있습니다.

"Permalink"에 대한 다른 스크립트들을 살펴볼 수 있습니다.

요약하자면, p=123 값은 TopicCustomFields 또는 PostCustomFields에 import_id라는 이름으로 저장되어야 하며, 이후 스크립트를 실행하여 영구링크를 생성할 수 있습니다.

몇 분 전에 “원격 이미지를 로컬로 다운로드” 기능을 활성화하고 모든 이미지를 로컬 서버 "bbPress"로 다운로드했습니다. 가져오기(Discourse import) 중에 Discourse가 이미지를 다운로드하도록 sidekiq 작업을 활성화하는 방법은 무엇인가요?

불편을 드려 죄송합니다. 모든 링크를

www.old.com/%postname%/

에서

www.NewDiscourse.com/t/id/%postname%/

로 리다이렉트하는 방법은 무엇인가요?

%postname%/가 동일한 값이라고 생각하지 않습니다.

작업이 완료될 때까지 기다리면 됩니다. 스크립트가 실행될 때 업로드를 처리하도록 수정하고 싶다면, 그렇게 하는 다른 스크립트들을 참고할 수 있습니다.

Permalinks를 생성하는 다른 스크립트들을 참고해 보세요. vbulletin.rb에는 permalinks에 대한 예제가 있습니다.

기존의 bbpress.rb는 데이터베이스에 있는 첨부 파일을 처리하므로, 직접 해당 파일로 링크를 걸었던 사용자가 있거나 그런 상황이 있는 것이죠? 그렇다면 정규 표현식(regex)으로 그것들을 찾아내고, 다른 업로드 함수들이 처리하는 방식으로 처리해야 합니다. Discourse가 이미 이를 처리하고 있다면, 제 생각에는 그렇게 하는 것이 잘 작동할 것이므로 그냥 Discourse에 맡기는 것이 더 나을 수 있습니다.

감사합니다 @pfaffman @nizar9

컨트롤 패널에서 download remote images 기능을 활성화하여 이전 bbPress 게시물에 있는 모든 이미지를 Discourse로 저장하고 이전하는 데 성공했습니다.

하지만 :cry: 여전히 다음과 같은 이전 bbPress 링크를 301 리다이렉트하는 데 막혀 있습니다.

> https://www.demo.com/%postname%

새로운 링크로

> www.NewDiscourse.com/t/id/%postname%/

해당 토픽의 새로운 id를 알 수 없어 htaccess 정규식으로는 문제를 해결할 수 없습니다.

그렇습니다. 데이터를 덤프로 내보내서 이를 가능하게 해주는 최소 하나의 가져오기 스크립트가 있습니다. 앞서 말씀드린 대로, Discourse에서 Permalink 리디렉션을 생성하여 이 문제를 해결할 수 있습니다.

bbPress에서 Discourse로 이미지를 가져오는 방법입니다.
아래는 예시 bbpress.rb 스크립트입니다.
이 스크립트는 bbPress 디렉터리에서 아바타 이미지를 복사하여 Discourse 인스턴스에 업로드합니다.

# bbpress.rb

# bbPress 아바타 가져오기 및 Discourse 아바타 업데이트
def import_avatars
  users.each do |user|
    bbpress_avatar_path = "/path/to/bbpress/avatars/#{user['avatar_filename']}"
    next unless File.exist?(bbpress_avatar_path)

    avatar_upload = File.open(bbpress_avatar_path)
    DiscourseAvatar.create_for(user['email'], avatar_upload, override_gravatar: true)
  end
end

# 함수 호출
import_avatars

이제 create_permalinks 함수를 만들어 적절한 URL을 생성하고 301 리다이렉트를 처리하세요.

# bbpress.rb

# postname 매개변수를 가진 영구 링크 생성 및 리다이렉트 처리
def create_permalinks
  permalinks.each do |permalink|
    topic_id = permalink['topic_id']
    postname = extract_postname_from_permalink(permalink['url']) # postname을 추출하는 함수 구현

    topic_link = "https://my-discoursexxxx.com/t/#{topic_id}/#{postname}" # 올바른 URL 구조로 이 줄 수정

    create_discourse_permalink(topic_id, permalink['url'], topic_link)
    create_redirect(permalink['url'], topic_link) # 301 리다이렉트를 생성하는 함수 구현
  end
end

# 함수 호출
create_permalinks

create_redirect 함수는 이전 bbPress 영구 링크에서 새로운 Discourse URL로 301 리다이렉트를 추가해야 합니다.
참고: 경로를 본인 환경에 맞게 교체하세요.

잘 작동하기를 바랍니다.

업로드에는 작동하지 않습니다. Discourse는 모든 파일에 새 이름을 부여합니다. 이미지 리다이렉트가 필요하다는 점을 제가 알아채지 못했습니다. 그런 요청을 한 사람은 본 적이 없습니다.

Discourse와 bbpress가 동일한 슬러그를 사용하는 일부 주제에서는 작동할 수 있습니다.