Estou tentando importar de um fórum Vanilla usando as instruções publicadas aqui. No entanto, recebo o seguinte erro ao executar o script de importação vanilla.rb:
Carregando grupos existentes...
Carregando usuários existentes...
Carregando categorias existentes...
Carregando posts existentes...
Carregando tópicos existentes...
analisando arquivo...
lendo arquivo...
Traceback (most recent call last):
5: from script/import_scripts/vanilla.rb:254:in `<main>'
4: from /var/www/discourse/script/import_scripts/base.rb:47:in `perform'
3: from script/import_scripts/vanilla.rb:17:in `execute'
2: from script/import_scripts/vanilla.rb:37:in `parse_file'
1: from script/import_scripts/vanilla.rb:72:in `read_file'
script/import_scripts/vanilla.rb:72:in `gsub': invalid byte sequence in UTF-8 (ArgumentError)
Tentei alterar o conjunto de caracteres do banco de dados MySQL para UTF8 seguindo as instruções aqui e depois reexportar o arquivo de exportação, mas isso não resolveu o problema. Alguma sugestão?
Você pode pesquisar no Google sobre codificação UTF-8. É necessário fazer algo para converter a tabela para UTF-8. Na época em que fiz isso, havia complicações adicionais porque algumas linhas estavam em um formato e outras em outro. Acredito que fiz algo sem sentido, convertendo os dados item por item.
Ah, é terrível. Sua melhor aposta, com base numa lembrança vaga de uma única vez em que fiz isso há mais de um ano, é experimentar o maior número possível de conversões diferentes até finalmente encontrar uma que funcione para todos ou a maioria dos dados. Acredito que fiz várias transformações uma por uma, que acabaram sendo perda de tempo, até tropeçar numa conversão que funcionou para todos (a maioria?) dos dados.
Aqui está o que fiz. Use por sua conta e risco. (Isso era vbulletin, só pra constar).
def char_map(raw_original)
raw = raw_original.dup
debug = false # (raw.length > 50)
# windows 1252
all = ''
win_encoded = ''
### Codificação WIN1252
win_encoded = ''
begin
win_encoded = raw.force_encoding('utf-8').encode("Windows-1252",
invalid: :replace, undef: :replace, replace: ""
).force_encoding('utf-8').scrub
rescue => e
puts "\n#{'-'*50}\nWin1252 falhou para \n\n#{raw}\n\n"
win_encoded = ''
end
### Codificação ISO 8859
iso_encoded = ''
if all.length == 0 && win_encoded.length > 0 && win_encoded != raw
all = (debug ? "Win1252--" : '') + win_encoded
else
all = raw
end
all = old_char_map(all)
all
end
Conseguimos fazer isso funcionar adicionando um comando simples para codificar o arquivo como UTF-8 ao lê-lo, usando algo como encode\"UTF-8\" nas linhas 76-80 do script de importação vanilla.rb.
Estou apenas aguardando a confirmação da sintaxe exata do cara que fez isso via linha de comando. Atualizarei isto quando a tiver.
Trabalhei nesse processo há apenas alguns meses (e não sou desenvolvedor ) e consegui migrar com sucesso um fórum Vanilla auto-hospedado para Discourse auto-hospedado. Uma coisa que foi fundamental para mim foi garantir, ao exportar os dados com o Vanilla Porter, que eu selecionasse “Vanilla 2” como o Source Forum Type no primeiro menu suspenso.
Se bem me lembro, não encontrei o erro UTF-8 novamente ao usar o script mais recente do Vanilla Porter e o tipo de fórum “Vanilla 2”.
Se essas duas sugestões não fizerem diferença para sua importação, por favor, forneça alguns detalhes sobre as etapas que você tomou até agora e exatamente o que você está vendo. Às vezes, existem pequenas variações no “mesmo erro” que podem fazer uma grande diferença na solução de problemas.