Importar scripts vbulletin5.rb

Estou usando o script de importação oficial para vBulletin v5 e encontrei um problema.

A estrutura do meu fórum vBulletin é assim:

/forum/
/forum/sub-category1/
/forum/sub-category1/thread1/
/forum/sub-category1/thread2/
/forum/sub-category2/
/forum/sub-category2/thread1/
/forum/sub-category2/thread2/

Ao executar o script de importação, isso resulta em duas categorias no Discourse sem nenhum tópico:

/c/sub-category1
/c/sub-category2

Verifiquei outro fórum vBulletin e notei que eles não anexam suas URLs. Agora assumo que essa é a mudança que preciso fazer no meu fórum antes de poder usar o script:

/forum/
/forum/sub-category1/
/forum/sub-category2/
/forum/thread1a/
/forum/thread2a/
/forum/thread1b/
/forum/thread2b/

Depois disso, teria que atribuir manualmente categorias a cada tópico novamente.

Alguém tem experiência com esse script?

Talvez haja algo no script que chame sua atenção e que possa ser alterado para lidar com uma estrutura mais aninhada? Posso estar totalmente no caminho errado.

Por “thread”, você quer dizer tópico do Discourse? Os tópicos estão sendo criados, mas não nas categorias corretas?

Olá Jay,

Obrigado pela sua resposta.

Ah, sim — estou falando dos Tópicos do Discourse. Não há nada lá além dessas categorias vazias. E todos os usuários foram importados com sucesso.

Mike

Algo está impedindo a importação de tópicos e posts. Eu esperaria que você visse erros quando a execução ocorresse. Tópicos e posts são criados após os usuários. Acredito que tópicos e posts estejam em funções separadas. O importador deve mostrar o progresso nesses itens, assim como fez para os usuários.

Não há mensagens de erro durante a importação — apenas alguns avisos sobre endereços de e-mail de usuários inválidos quando a função create_users é executada. No entanto, a importação de usuários é bem-sucedida no final. Aqui está o log (removi os avisos, pois continham endereços de e-mail de clientes):

importando posts...
5 / 5 (100.0%)  [290527 itens/min]                                                            
importando anexos...   
20182 / 5 (403640.0%)

Aqui é onde acho que ele vê apenas minhas cinco categorias como posts e as importa. E não sabe o que fazer com todos os anexos dos tópicos reais que não foram importados?

Aviso:

Inicialmente, a importação falhou porque o banco de dados do vBulletin que recebi não tinha uma tabela customprofilepic — adicionei uma tabela vazia aqui.

E não havia avatares personalizados — então o AVATAR_DIR, referenciado no script de importação, é apenas uma pasta vazia que criei. Comentei as seguintes linhas no script de importação que faziam referência a esses ativos:

create_users(users, total: user_count, offset: offset) do |user|
        username = @htmlentities.decode(user["username"]).strip
        {
          id: user["userid"],
          name: username,
          username: username,
          email: user["email"].presence || fake_email,
          admin: user['admin'] == 1,
          password: user["password"],
          website: user["homepage"].strip,
          title: @htmlentities.decode(user["usertitle"]).strip,
          primary_group_id: group_id_from_imported_group_id(user["usergroupid"]),
          created_at: parse_timestamp(user["joindate"])
          # post_create_action: proc do |u|
          #   @old_username_to_new_usernames[user["username"]] = u.username
          #   import_profile_picture(user, u)
          #   import_profile_background(user, u)
          # end
        }
      end

Mas, segundo meu entendimento, essas alterações afetam apenas a criação de usuários. E os usuários são criados com sucesso.

Este é o script completo de importação que estou usando:

O script coleta todos os tópicos da tabela node no banco de dados do vBulletin, que está presente e contém cerca de 34 mil postagens. Os nomes das colunas são idênticos aos referenciados pelo script:

Parece que deveria funcionar sem problemas :roll_eyes:

O script de importação procura por contenttypeid=23 e contenttypeid=22 para criar publicações.

Ao examinar rapidamente a tabela node, posso afirmar que o 23 representa uma publicação com anexo e o 22 deve ser o próprio anexo.

A maioria das publicações possui contenttypeid=21 — publicações sem anexos. E não vejo uma importação para essas. Ou isso é coberto por:

post_count = mysql_query("SELECT COUNT(nodeid) cnt FROM #{DBPREFIX}node WHERE parentid NOT IN (
SELECT nodeid FROM #{DBPREFIX}node WHERE contenttypeid=23 ) AND contenttypeid=22;").first["cnt"]

Isso percorre tudo que sobra após a conclusão da importação dos tipos 23/22. Mas existem mais IDs de tipo de conteúdo além de 23/22/21 — então isso também capturaria esses.


As categorias são importadas relativas a um ROOT_NODE que foi pré-configurado como 2. Talvez eu precise alterá-lo para 3 para suportar minhas URLs “aninhadas em 3 níveis”?

ATUALIZAÇÃO: Acabei de executar novamente a importação com ROOT_NODE=3 e nada mudou.

Parece que seu vBulletin é diferente do que o script espera. Antes de poder importar as postagens, você precisará descobrir por que nenhum dos tópicos foi criado.

Ok. É o contenttypeid que está causando o problema:

def import_categories
    puts "", "importando categorias de nível superior..."

    categories = mysql_query("SELECT nodeid AS forumid, title, description, displayorder, parentid
	      FROM #{DBPREFIX}node
          WHERE parentid=#{ROOT_NODE}
        UNION
          SELECT nodeid, title, description, displayorder, parentid
          FROM #{DBPREFIX}node
          WHERE contenttypeid = 20
            AND parentid IN (SELECT nodeid FROM #{DBPREFIX}node WHERE parentid=#{ROOT_NODE})").to_a

Por exemplo, a função import_categories usa contenttypeid = 23, que é o mesmo ID que o script usa para postagens. O ID para categorias é 20. Ao alterar isso dentro do script, finalmente consegui ver minhas subcategorias/tópicos :raised_hands:

Agora, tudo o que falta são os tópicos/postagens.

Fiz um pull request com algumas atualizações para o importador do VBulletin5. Uma das mudanças mais importantes é que ele eliminou esses IDs codificados manualmente.

Há também um melhor suporte para uploads, e o importador agora importa tags e cria links permanentes para tópicos e (sub)categorias.