Puma宝石 - 无法构建本地宝石扩展

41

我在安装puma gem时遇到了以下错误

    $ gem install puma
    正在下载: puma-2.11.2.gem (100%)
    正在构建本地扩展,这可能需要一些时间...
    ERROR: 安装puma出错:
    ERROR: 无法构建gem本地扩展。
ruby extconf.rb 没有找到 -lcrypto中的BIO_read() 没有找到 -llibeay32中的BIO_read() *** extconf.rb 失败 ***
15个回答

77

请尝试以下方法

gem install puma -- --with-cppflags=-I/usr/local/opt/openssl/include
bundle install

您也可以指定gem版本,例如:

gem install puma -v '2.11.3' -- --with-cppflags=-I/usr/local/opt/openssl/include

2
我使用的是El Capitan OSX 10.11.2操作系统。当我第一次尝试执行"gem install puma"时,出现了"ERROR: Failed to build gem native extension"错误提示。之后,我尝试了您提供的命令(使用puma版本"2.9.1"),结果似乎没有出现任何错误!(耶!)。请问您能否解释一下这个命令的含义?(我很好奇这个命令是如何解决问题的)。感谢您的帮助! - Atlas7
在我的El Capitan上运行良好,不过我也不知道为什么。 - JoannaFalkowska
5
在El Capitan上,运行gem install puma -v '2.11.2' -- --with-opt-dir=/usr/local/opt/openssl。这对我来说很有效。 - Kevin R.
9
gem install puma -v '3.6.0' -- --with-opt-dir=/usr/local/opt/openssl 在 Sierra 上可以使用。 - mahi
我也在El Capitan上运行了@KevinR的解决方案,对我也起作用了。虽然我想知道为什么在这个特定的操作系统中会起作用,以及如何起作用。 - nrmb
显示剩余4条评论

41

我正在使用OS X 10.12.4,@mahi添加的评论对我有效:

gem install puma -v '3.6.0' -- --with-opt-dir=/usr/local/opt/openssl

@Ameen,哪里出了问题?你是否遇到与上面相同或不同的错误?请注意,这是针对OS X 10.12.4而非Ubuntu的。在Ubuntu中,openssl库很可能在其他地方。 - Beartech
1
适用于OSX 10.12.6(Sierra),现在bundle install已成功。 - xaunlopez
哇塞,这正是我需要的。在macOS 10.14.3上运行良好。 - Alex

22

这不是我的答案,但这个帮助我在MacOS(Big Sur)上安装puma,因为在构建puma时出现了警告。

我使用的命令是:

gem install puma -- --with-cflags="-Wno-error=implicit-function-declaration"

1
这是解决方案。在这里找到它:https://dev59.com/jFIG5IYBdhLWcg3wvD85#63201544 - Kyle Krzeski

19

安装libssl1.0-dev对我很有帮助。请尝试安装

apt-get install libssl1.0-dev

然后

gem install puma

2
或者安装libssl-dev以获取更通用的开发版本。 - Daniel-KM
2
这是Ubuntu/Linux开发人员的可行解决方案。 - jedi
1
适用于Ubuntu 18.04。感谢@Victor。 - Fernando Kosh
是的,这在Ubuntu 18.04中可以工作,非常感谢。 - Mohammad Habibur Rahman
这帮助我在使用Ubuntu 18.04的Windows Linux子系统上解决了这个错误。 - Mashhood

18

你试过了吗?

DISABLE_SSL=true gem install puma

如果您有版本特定的需求,请指定版本,例如:

DISABLE_SSL=true gem install puma -v version_number

2
如果我们谈论开发环境,那么这是最简单的解决方案! - iatanasov

13

我在OSx El Capitan上遇到了类似的问题。为了解决这个问题,我需要执行以下步骤:

brew install openssl
brew link --force openssl

这可能会触发警告并且无法工作。链接仅限Keg的openssl意味着您可能会在使用Homebrew openssl的标头时链接到不安全的、已弃用的系统OpenSSL。 相反,将完整的包含/库路径传递给您的编译器,例如: -I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib``` - hatenine

9
可能是一个 OpenSSL 错误。
gem install puma -v 2.11.2 -- --with-opt-dir=/usr/local/opt/openssl

8

我在Mac OS X 10.10下遇到了类似的错误。

mkmf.log里的细节显示,这是因为:

同意Xcode/iOS许可证需要管理员权限,请使用sudo以root身份重新运行。

这是由于安装了新版本的Xcode引起的。这个问题很容易通过接受Apple的Xcode许可证来解决:

sudo xcodebuild -license

希望这能在未来帮助到某些人;-)

8

1
这对我来说真是救命稻草!在Mac OS 10.14.5上遇到了Puma 4.0.1的这个问题。谢谢你! - ecbrodie

6
宝石正在寻找SSL库。因此,我们必须提供包含SSL库的库的路径。
例如:/usr/share/openssl
在我的情况下,SSL库“libcrypto”位于/usr/local/lib中。因此,让我们将/usr/local传递给它(不包括 lib 单词)。
对于gem安装操作:
gem install puma -- --with-opt-dir=/usr/local

针对bundle install操作

bundle config build.puma --with-opt-dir=/usr/local
bundle install

注意build.puma的名称,其中puma是宝石的名称。

build配置命令将以下内容添加到~/.bundle/config文件中

---
BUNDLE_BUILD__PUMA: "--with-opt-dir=/usr/local"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接