Discourse 找不到插件中指定的 gem

您好!我正在开发一个插件,用于在Discourse中启用Sign-In with Ethereum。问题是,在安装插件时,我遇到了一个依赖项(rbsecp256k1)的错误。

ERROR:  Error installing rbsecp256k1:
	ERROR: Failed to build gem native extension.

    current directory: /var/www/discourse/plugins/sdp/gems/2.7.5/gems/rbsecp256k1-5.1.0/ext/rbsecp256k1
/usr/local/bin/ruby -I /usr/local/lib/ruby/site_ruby/2.7.0 -r ./siteconf20220303-1234-gyqjb.rb extconf.rb
extconf.rb:3:in `require': cannot load such file -- mini_portile2 (LoadError)
	from extconf.rb:3:in `<main>'

extconf failed, exit code 1

我想知道可能是什么原因,因为我在开发环境中手动安装依赖项时是可以正常工作的。

该 gem 有 OS 级依赖项,根据其文档,您需要安装它们:GitHub - etscrivner/rbsecp256k1: Compiled Ruby wrapper around libsecp256k1 for secp256k1 ECDSA.

是的,我已经安装了它们,问题发生在找不到 mini_portile2 时,它是它的一个依赖项。

1 个赞

您是如何在插件中声明 mini_portile2 依赖项的?

1 个赞

我遇到了安装相同 gem 依赖项的同样问题。

请看

如果有一个更直接的解决方案,我将非常高兴。

2 个赞

你不能直接删除它,因为它已经包含在 Discourse 核心中了吗?

1 个赞

我的意思是,我可以,但问题不在于那个 gem,问题在于 rbsecp256k1,当它尝试构建时,它找不到 mini_portile2 gem(正如错误所说:cannot load such file -- mini_portile2 (LoadError) from extconf.rb:3:in \u003cmain\u003e'

您正在重复 @fzngagan 的观点,请看他上面提供的链接:Having a hard time installing `eth` gem in a plugin in production - #3 by fzngagan

他的解决方案可行,但我认为那不是一个有效的选项,没有用户愿意做所有这些事情来添加一个插件。我只是想知道是否有人能想到一个更好的方法(最接近于只需添加仓库即可)。正如 @fzngagan 本人所说:

如果有一个更直接的解决方案,我会非常高兴。

现在我们有两个关于完全相同问题的议题……

1 个赞

我一直在缩小范围,似乎与 gem 无关,似乎与 extconf.rb 有关。我尝试了其他几个具有更复杂设置的 gem(ruby-magiclibusb),两者都无法正常工作(原因不同),它们共同的特点是在 extconf.rb 处存在依赖关系。

1 个赞

此问题已在 discourse 的最新 tests-passedstable 分支中修复。

2 个赞

还没有,PR 还没有合并。

1 个赞

@RGJ 之前有一些测试失败需要解决。现在已经合并了。

2 个赞