Вот что я сделал. Я вошел на сервер и зашел в контейнер 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 пытается их выполнить? Это действительно стоит изучить, и я надеюсь, что существует простое решение.