我做了以下操作。我登录到服务器并进入了 docker 容器。
-
创建一个名为
gems的文件夹 -
创建一个子目录
2.7.5(tests-passed上生产 discourse 使用的 ruby 版本) -
cd回到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 运行(尝试运行但失败)安装 gem 的命令完全相同。
-
现在压缩这个文件夹。
-
退出 docker 容器,并使用
docker cp命令将 zip 文件复制到 docker 容器外部。 -
通过 filezilla 或 vscode 连接到您的服务器并下载 zip 文件。
-
将其解压到插件的根文件夹。这样您的插件文件夹现在将包含 gems 目录。
-
现在将 gems 文件夹与插件一起推送到 github。
现在,当您在 discourse 上使用此插件重建时,discourse 将使用您提供的依赖项,而不会尝试安装它们。这是一个临时的解决方法,一旦 discourse 升级 ruby 版本,就需要重新执行。
但最大的问题是,为什么在 discourse 尝试运行时,与在终端运行时相同的命令会失败。这非常值得研究,我希望有一个简单的解决方法。