Habe Schwierigkeiten bei der Installation des `eth`-Gems in einem Plugin in der Produktion

Ich muss das eth-Gem in einem Plugin installieren, aber ich habe große Schwierigkeiten damit. Es hängt von einer Reihe anderer Gems ab, von denen einige native Erweiterungen haben. Hier ist die Abhängigkeitsliste, wenn Sie es versuchen möchten.

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

Das Problem liegt bei rbsecp256k1. Es versucht, mini_portile2 für den Aufbau seiner nativen Erweiterungen zu erfordern, kann es aber nicht finden, obwohl es installiert und required ist. Ich habe große Anstrengungen unternommen, wie das Forken des Gems und das manuelle Erfordern des absoluten Pfades, auch habe ich versucht, mini_portile2 buchstäblich in rbsecp256k1 zu klonen und es von dort zu erfordern, aber nichts hat bisher funktioniert.

Jede Hilfe wäre sehr willkommen.

2 „Gefällt mir“

Ich habe endlich einen Workaround gefunden. Ich werde ihn gleich teilen.

3 „Gefällt mir“

Hier ist, was ich getan habe. Ich habe mich auf dem Server angemeldet und den Docker-Container betreten.

  • Erstellen Sie einen Ordner namens gems

  • Erstellen Sie ein Unterverzeichnis 2.7.5 (Ruby-Version, die von der Produktions-Discourse auf tests-passed verwendet wird)

  • Wechseln Sie zurück in den Ordner gems

  • Führen Sie Befehle auf diese Weise aus

    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
    ...
    

    Hinweis: Dies sind exakt dieselben Befehle, die Discourse ausführt (versucht auszuführen, aber fehlschlägt), um die Gems zu installieren.

  • Komprimieren Sie nun diesen Ordner.

  • Verlassen Sie den Docker-Container und kopieren Sie die Zip-Datei mit dem Befehl docker cp aus dem Docker-Container heraus.

  • Verbinden Sie sich über Filezilla oder VS Code mit Ihrem Server und laden Sie die Zip-Datei herunter.

  • Extrahieren Sie sie in den Stammordner Ihres Plugins. Ihr Plugin-Ordner enthält dann das Verzeichnis gems.

  • Pushen Sie nun den Ordner gems mit dem Plugin nach GitHub.

Wenn Sie nun eine Neuerstellung auf Discourse mit diesem Plugin durchführen, verwendet Discourse die von Ihnen bereitgestellten Abhängigkeiten und versucht nicht, diese zu installieren. Dies ist eine temporäre Problemumgehung und muss neu durchgeführt werden, sobald Discourse die Ruby-Version aktualisiert.

Aber hier ist die große Frage: Warum schlagen dieselben Befehle, die bei der Ausführung im Terminal funktionieren, fehl, wenn Discourse versucht, sie auszuführen? Es wäre wirklich lohnenswert, dies zu untersuchen, und ich hoffe, es gibt eine einfache Lösung.

3 „Gefällt mir“

Ich habe dies kürzlich in behoben

3 „Gefällt mir“

Großartig, danke. :clap:

Könnten Sie diesen Fix bitte nach stable cherry-picken, @tgxworld?

1 „Gefällt mir“

Habe ich in

gemacht

3 „Gefällt mir“