Tendo dificuldade em instalar a gem `eth` em um plugin em produção

Aqui está o que fiz. Fiz login no servidor e entrei no contêiner docker.

  • crie uma pasta chamada gems

  • crie um subdiretório 2.7.5 (versão ruby usada pelo discourse de produção em tests-passed)

  • volte para a pasta gems

  • Execute os comandos desta forma

    RUBY_VERSION=2.7.5
    gem install pkg-config -v 1.4.7 -i $RUBY_VERSION --no-document --ignore-dependencies --no-user-install
    gem install mkmfmf -v 0.4 -i $RUBY_VERSION --no-document --ignore-dependencies --no-user-install
    ...
    

    Nota: estes são exatamente os mesmos comandos que o discourse executa (tenta executar, mas falha) para instalar os gems.

  • Agora comprima esta pasta.

  • Saia do contêiner docker e copie o zip para fora do contêiner docker usando o comando docker cp.

  • Conecte-se ao seu servidor via filezilla ou vscode e baixe o zip.

  • Extraia-o para a pasta raiz do seu plugin. Assim, sua pasta de plugin agora terá o diretório gems.

  • Agora envie a pasta gems com o plugin para o github.

Agora, quando você fizer um rebuild no discourse com este plugin, o discourse usará as dependências que você forneceu e não tentará instalá-las. Esta é uma solução temporária e precisará ser refeita assim que o discourse atualizar a versão do ruby.

Mas aqui está a grande questão: por que os mesmos comandos que funcionam ao serem executados pelo terminal falham quando o discourse tenta executá-los? Vale muito a pena investigar e espero que haja uma solução simples.

3 curtidas