Ho difficoltà ad installare la gemma `eth` in un plugin in produzione

Sto dovendo installare la gemma eth in un plugin ma sto avendo davvero difficoltà a farlo. Dipende da un sacco di altre gemme, alcune delle quali hanno estensioni native. Ecco l’elenco delle dipendenze se vuoi provare.

gem 'pkg-config', '1.4.7', require: false
gem 'mkmfmf', '0.4', require: false
gem 'keccak', '1.3.0', require: false
gem 'zip', '2.0.2', require: false
gem 'mini_portile2', '2.7.0', require: false
gem 'rbsecp256k1', '5.1.0', require: false
gem 'konstructor', '1.0.2', require: false
gem 'ffi', '1.15.5', require: false
gem 'ffi-compiler', '1.0.1', require: false
gem 'scrypt', '3.0.7', require: false
gem 'eth', '0.5.1', require: false
gem 'siwe', '1.0.0', require: false

Il problema è con rbsecp256k1. Tenta di richiedere mini_portile2 per costruire le sue estensioni native ma non riesce a trovarlo nonostante sia installato e required. Ho fatto grandi sforzi, come fare il fork della gemma e richiedere manualmente il percorso assoluto, ho anche provato a clonare letteralmente mini_portile2 in rbsecp256k1 e richiederlo da lì, ma finora nulla ha funzionato.

Qualsiasi aiuto sarebbe molto apprezzato.

2 Mi Piace

Sono finalmente riuscito a trovare una soluzione alternativa. La condividerò tra poco.

3 Mi Piace

Ecco cosa ho fatto. Ho effettuato l’accesso al server ed sono entrato nel container docker.

  • crea una cartella chiamata gems

  • crea una sottodirectory 2.7.5 (versione ruby utilizzata da discourse di produzione su tests-passed)

  • torna alla cartella gems

  • Esegui comandi in questo modo

    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: questi sono esattamente gli stessi comandi che discourse esegue (tenta di eseguire, ma fallisce) per installare le gem.

  • Ora comprime questa cartella.

  • Esci dal container docker e copia lo zip all’esterno del container docker usando il comando docker cp.

  • Connettiti al tuo server tramite filezilla o vscode e scarica lo zip.

  • estrailo nella cartella principale del tuo plugin. Quindi la tua cartella plugin avrà ora la directory gems.

  • Ora carica la cartella gems con il plugin su github.

Ora, quando esegui una ricostruzione su discourse con questo plugin, discourse utilizzerà le dipendenze che gli hai fornito e non tenterà di installarle. Questa è una soluzione temporanea e dovrà essere rifatta una volta che discourse aggiornerà la versione di ruby.

Ma ecco la grande domanda, perché gli stessi comandi che funzionano quando vengono eseguiti dal terminale falliscono quando discourse tenta di eseguirli. Vale davvero la pena indagare e spero che ci sia una soluzione semplice.

3 Mi Piace

Ho risolto questo problema di recente in

3 Mi Piace

Fantastico, grazie. :clap:

Saresti in grado di fare un cherry-pick di questa correzione su stable @tgxworld?

1 Mi Piace

Fatto in

3 Mi Piace