Comandos Rake posts:remap - 0 posts remapeados!

Estou tentando localizar e substituir algumas imagens quebradas remanescentes da nossa migração do fórum para o Discourse e tive grande sucesso (adoro o comando remap!), mas ele não está encontrando nada para substituir nestes exemplos e não consigo ver nada de errado. Você consegue?

Conteúdo de exemplo:

<img src="https://londonbikers.com/images/transparent.png" alt="PICT0738.JPG" data-orig-src="upload://1yz82u6bbkaAQ7xP06qNTmX9qy3.JPG" width="666" height="500" class="d-lazyload">

e

<img src="https://londonbikers.com/images/transparent.png" alt="Rhonda.JPG" data-orig-src="upload://vXQ67D17QssTe5cu6lamJ5XB5Ep.JPG" width="590" height="500" class="d-lazyload">

Preciso fazer isso em duas etapas, pois preciso manter o conteúdo da tag alt e reconstruir o elemento img ao redor dele. Está falhando no primeiro remap:

ou seja, ENCONTRAR:
<img src="https://londonbikers.com/images/transparent.png" alt="

e SUBSTITUIR por:
<img src="https://londonbikersarchive.blob.core.windows.net/forum-attachments/

Assumi que as aspas duplas precisam ser escapadas com uma barra invertida? Então usei este comando:

rake posts:remap["<img src=\"https://londonbikers.com/images/transparent.png\" alt=\"","<img src=\"https://londonbikersarchive.blob.core.windows.net/forum-attachments/"]

Mas recebo a mensagem 0 posts remapeados! quando existem milhares de posts assim com esses elementos. Alguma ideia?

Minha segunda etapa seria então remapear o final da tag de:
width="666" height="500" class="d-lazyload">

para:
/>

Ah, espere, algumas dessas imagens estão funcionando. É a funcionalidade de anexos do Discourse? Existe alguma lógica de renderização personalizada em vez de serem strings HTML no banco de dados?

Por exemplo, isso está mostrando uma foto:

<img src="https://londonbikers.com/uploads/default/original/1X/25b381a9dc03f023a1c5d0af4f2f3132dfbf45c7.jpg" alt="The_rides_0010.jpg" width="640" height="480" class="d-lazyload">

Mas esta aqui não. Posso ter o arquivo no armazenamento de blobs na nuvem, então gostaria de importá-lo para o Discourse ou apenas referenciá-lo a partir do armazenamento de blobs:

<img src="https://londonbikers.com/images/transparent.png" alt="__2.jpg" data-orig-src="upload://411oUp2Yn6wumJCRAiFptkwTF58.jpg" width="662" height="500" class="d-lazyload">

Essas imagens estão em raw?

Acho que, em vez de fazer isso com remap, você terá mais sucesso usando o Ruby no console do Rails.

Desculpe, não entendi nada disso, Jay :slight_smile:

Raw, como no formato de arquivo? Não, apenas os formatos web comuns. Fazendo o quê no console do Rails?

raw é o campo onde está o texto que você vê no editor. O que você está substituindo é o que você vê ao editar a postagem na interface, certo? (cooked é o conteúdo processado e o que é exibido.)

Fazendo coisas para reescrever as postagens. Isso pode ser apenas o suficiente para torná-lo perigoso:

bps = Post.where("raw like '%//SOME-STRING%'")
bps.each do |post|
  post.raw.gsub!(/OLD/,'NEW')
  post.save
end

A vantagem em relação à tarefa rake é que você não precisa lidar com múltiplos níveis de escape.