Трудности с установкой gem `eth` в плагине в production

Вот что я сделал. Я вошел на сервер и зашел в контейнер Docker.

  • Создал папку с именем gems

  • Создал подкаталог 2.7.5 (версия Ruby, используемая в продакшн-окружении Discourse на ветке tests-passed)

  • Вернулся в папку gems

  • Запустил команды следующим образом:

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

    Примечание: это те же самые команды, которые запускает (пытается запустить, но терпит неудачу) Discourse для установки гемов.

  • Теперь заархивируйте эту папку.

  • Выйдите из контейнера Docker и скопируйте архив за его пределы, используя команду docker cp.

  • Подключитесь к вашему серверу через FileZilla или VSCode и скачайте архив.

  • Распакуйте его в корневую папку вашего плагина. Теперь в папке плагина будет присутствовать каталог gems.

  • Теперь отправьте папку gems вместе с плагином в GitHub.

Теперь, когда вы выполните пересборку в Discourse с этим плагином, система будет использовать предоставленные вами зависимости и не будет пытаться их установить. Это временное решение, и его придется повторять заново, как только Discourse обновит версию Ruby.

Но вот главный вопрос: почему те же самые команды, которые работают при запуске из терминала, не работают, когда Discourse пытается их выполнить? Это действительно стоит изучить, и я надеюсь, что существует простое решение.