Migrating from Invision Power Board to Discourse

is this offer still available ?
Getting to the point where I might have to pay IPB :sadpanda:

Want to convert from http://mandrivausers.org/

Hey, i will probably need to do a migration from IP Board v3.4.5 to Discourse at my job, any news about the import script? Would love to test it.

I wont promise that it will work for you, but I will try to clean it up and submit a PR in the next few days. If you have a budget, my contact info is in my profile.

I also need to do a migration from a bitrix based forum, so i’ll have to write a custom script anyway and figure out how all of this works, anything to save me some time would be extremely helpful. Thank you.

Here it is. The two sites that I imported with this code were wildly different. I hope that someone finds it useful.

https://github.com/discourse/discourse/pull/5543

Some version of this is in core now, so you probably don’t want to use what’s in the link above.

ipboard 버전 4의 가져오기 스크립트가 어디에 있는지 알려주실 수 있나요?
저장소에서는 ipboard와 ipboard3 가져오기 스크립트만 보입니다.
ipboard4를 discourse로 마이그레이션하는 것을 지원하나요?

모르겠습니다. 제 추측으로는 ipboard.rb 스크립트가 시도해볼 만한 것 같습니다. 제가 이 스크립트를 어떤 버전의 ipboard용으로 작성했는지는 정확히 모르거든요. 작동하는지 확인하려면 직접 데이터로 시도해봐야 합니다. 이전에 (수년 전) 처음 ipboard 스크립트를 작성했을 때 말씀드린 것처럼, 제가 테스트했던 두 사이트는 매우, 매우 달랐습니다.

유료 지원을 원하신다면 Redirecting… 을 확인해 보세요.

답장 주셔서 감사합니다.
제 데이터로 시도해 보았지만, 오류가 발생하여 완료되지 않았습니다.
"profile_portal"이라는 테이블을 찾으려 하는데, 4 버전에는 해당 테이블이 존재하지 않습니다.
이 스크립트는 ipb3 또는 이전 버전을 위해 작성된 것으로 추측됩니다.
유료 지원에 대해 고민해 보겠습니다.

@pfaffman 님, 안녕하세요. 지원이 가능한지 알려주실 수 있을까요? v2.3.6에서 가져오려고 하는데, 이 버전에는 forum_id가 없어서 주제(topic)를 forum_id와 연결하는 데 문제가 있습니다. 주제와 포럼을 연결하는 값을 어떤 테이블에 저장하고 있는지 알려주시면 감사하겠습니다.

현재 주제를 가져오기 위해 작성한 코드는 다음과 같습니다. 가져오기는 되지만 모든 주제가 '분류 없음(uncategorized)'으로 들어가고 있습니다.

def import_topics
  puts "\n📌 Importing Topics..."
  total_count = mysql_query("SELECT count(*) count FROM iBB_posts WHERE new_topic = 1;").first['count']

  batches(BATCH_SIZE) do |offset|
    discussions = mysql_query(<<-SQL
      SELECT pid as tid, topic_id, post_title as title, post as raw,
             FROM_UNIXTIME(post_date) as created_at, author_id
      FROM iBB_posts
      WHERE new_topic = 1
      ORDER BY post_date ASC
      LIMIT #{BATCH_SIZE} OFFSET #{offset};
    SQL
    ).to_a

    break if discussions.empty?

    create_posts(discussions, total: total_count, offset: offset) do |discussion|
      {
        id: "topic-#{discussion['tid']}",
        user_id: user_id_from_imported_user_id(discussion['author_id']) || Discourse::SYSTEM_USER_ID,
        title: format_title(discussion['title']),  # Ensure titles are properly formatted
        raw: discussion['raw'],
        created_at: discussion['created_at'],
        post_number: 1
      }
    end
  end
end
def format_title(title)
  return "Untitled Topic" if title.nil? || title.strip.empty?
  CGI.unescapeHTML(title)
end
def import_replies
  puts "\n📌 Importing Replies..."
  total_count = mysql_query("SELECT count(*) FROM iBB_posts WHERE new_topic = 0;").first['count']

  batches(BATCH_SIZE) do |offset|
    comments = mysql_query(<<-SQL
      SELECT pid, topic_id, post as raw, FROM_UNIXTIME(post_date) as created_at, author_id
      FROM iBB_posts
      WHERE new_topic = 0
      ORDER BY post_date ASC
      LIMIT #{BATCH_SIZE} OFFSET #{offset};
    SQL
    ).to_a

    break if comments.empty?

    create_posts(comments, total: total_count, offset: offset) do |comment|
      topic_id = topic_lookup_from_imported_post_id("topic-#{comment['topic_id']}")
      next unless topic_id

      {
        id: "post-#{comment['pid']}",
        topic_id: topic_id,
        user_id: user_id_from_imported_user_id(comment['author_id']) || Discourse::SYSTEM_USER_ID,
        raw: comment['raw'],
        created_at: comment['created_at']
      }
    end
  end
end

토픽 생성기에 카테고리를 전달하지 않고 있으므로, 이를 수정해야 합니다.

할 의향은 있지만 ipb sql 데이터베이스에서 사용할 forum_id를 찾을 수 없어요

그렇다면 무료로 도움을 받아 이를 수정하는 것은 어려울 것입니다. IPB 가져오기 스크립트가 두 가지 더 있는 것 같은데, 그들에서 몇 가지 힌트를 얻을 수 있을 것입니다. 데이터베이스를 둘러보며 어디에 저장되어 있는지 확인하면 됩니다.

예산이 있다면 Discourse Migration - Literate Computing 를 참고해 보세요. 예산을 알려주시면 그에 맞춰 시도해 볼 수 있습니다.

답변해 주셔서 감사합니다. 하지만 저는 서비스 제안보다는 해당 문제에 대한 기술적인 가이드라인을 구체적으로 찾고 있었습니다. 빠른 답변에 다시 한번 감사드립니다.

데이터베이스 구조를 직접 확인할 수 없기 때문에 구조를 파악하지 못해 죄송합니다.

제가 말씀드릴 수 있는 것은, 그리고 이미 말씀드린 내용이기도 한데, 데이터베이스를 확인하여 카테고리가 어디에 숨어 있는지 찾아보라는 것입니다. 토픽 레코드에 놓치고 있는 필드가 있을 것입니다. 때로는 카테고리 ID가 포함된 다른 테이블을 가리키는 링크가 있어서 조인(join)을 해야 하는 경우도 있습니다. 아마도 예상하지 못한 이름이 붙어 있을 가능성이 큽니다.