Atualização online bem-sucedida, mas falha na reconstrução

Encontrei um problema curioso que pode destacar outra diferença entre atualizações online e atualizações de linha de comando.

Se eu realizar uma atualização online com um plugin com o gem rmagick, ela é bem-sucedida.

No entanto, ela falha com uma reconstrução de CLI com:

ERROR:  Erro ao instalar rmagick:
	ERROR: Falha ao compilar a extensão nativa do gem.

    diretório atual: /var/www/discourse/plugins/discourse-topic-previews-sidecar/gems/3.3.6/gems/rmagick-6.0.1/ext/RMagick
/usr/local/bin/ruby extconf.rb
verificando brew... não
verificando pacman... não
verificando versão Ruby >= 3.0.0... sim
*** extconf.rb falhou ***
Não foi possível criar o Makefile por algum motivo, provavelmente falta de bibliotecas e/ou cabeçalhos necessários. Verifique o arquivo mkmf.log para mais detalhes. Você pode precisar de opções de configuração.

Opções de configuração fornecidas:
	--with-opt-dir
	--without-opt-dir
	--with-opt-include=${opt-dir}/include
	--without-opt-include
	--with-opt-lib=${opt-dir}/lib
	--without-opt-lib
	--with-make-prog
	--without-make-prog
	--srcdir=.
	--curdir
	--ruby=/usr/local/bin/$(RUBY_BASE_NAME)
	--with-pkg-config
	--without-pkg-config
	--with-override-variables
	--without-override-variables
/var/www/discourse/plugins/discourse-topic-previews-sidecar/gems/3.3.6/gems/pkg-config-1.5.6/lib/pkg-config.rb:504:in `parse_pc': .pc não existe: <MagickCore> (PackageConfig::NotFoundError)

Os gems só são compilados durante uma compilação completa? Ou pode ser que tenha havido um incremento na versão do Ruby que só é realizado em uma reconstrução completa? (o que então força uma refabricação do gem?)

1 curtida

@featheredtoast alguma ideia se isso pode ter impactado o gem rmagick?:

houve um aumento simultâneo na versão do imagemagick?

2 curtidas

Atualizamos nossa imagem, portanto estamos compilando o imagemagick separadamente e incluindo apenas o binário final do imagemagick. Assim, não estamos mais incluindo bibliotecas de tempo de compilação para o imagemagick na imagem, em um esforço para reduzir o tamanho de nossas imagens base.

Você poderia simplesmente adicionar um script de instalação para instalar as bibliotecas do imagemagick, mas eu recomendaria remover a dependência do plugin no gem rmagick. Não tenho certeza de onde esse gem está sendo chamado, pois parece que ele está estendendo as chamadas de otimização de imagem do Discourse principal, que apenas chamam diretamente o binário do imagemagick.

1 curtida

Estou usando-o para processar uma imagem.

Mesmo que eu consiga encontrar uma solução alternativa, seria uma pena bloquear o uso do gem rmagick, pois a alternativa é mexer com chamadas de sistema para o ImageMagick, o que é um pouco… desajeitado… e muito menos amigável para o desenvolvedor em comparação com o uso de uma API conveniente na linguagem.

Você pode fazer algo como importar as dependências em tempo de compilação do gem - algo como o seguinte:

hooks:
  after_code:
    - exec: apt-get update && apt-get install -y libmagickwand-dev

Não estamos bloqueando nada de ser instalado, apenas não estamos mais incluindo as bibliotecas estáticas das quais o gem depende na imagem base.

1 curtida

Obrigado, Jeff!!

Primeiro verei se isso pode ser eliminado, depois tentarei isso como alternativa.

O formulário correto precisa de cmd: etc. Mas, desculpe, não dá. Não consigo confirmar se o erro é o mesmo, embora. Eu usei tmux e ele não me permite rolar.

1 curtida

Para rolar no tmux, você pressiona control-b e depois [ (colchete esquerdo). Você pode então rolar e usar q para sair do modo de rolagem.

1 curtida

Eu finalmente resolvi isso mudando para a API de linha de comando, que é bastante hostil. :sweat_smile:

O plugin não depende mais do gem rmagick. Isso é uma pena, mas é necessário.

3 curtidas