[protocolbuffers/protobuf]require 'google/protobuf' 在 ruby​​ gem 版本 3.4.0 x86_64-linux 上失败

2024-05-13 341 views
8

代码中不能要求最新版本的 ruby​​ gem,至少是 Linux 版本。这是错误消息:

> ruby -v
ruby 2.4.1p111 (2017-03-22

> irb
require 'google/protobuf'
LoadError: cannot load such file -- google/protobuf
    from /usr/local/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /usr/local/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from (irb):1
    from /usr/local/bin/irb:11:in `<main>'

上面的内容可以在官方 Ruby Docker 镜像上重现ruby:2.4.1,只需google-protobuf安装 gem。请注意,这对于所有依赖于 的 gem 来说都是一个重大变化google-protobof,包括最新的稳定grpcgem。

回答

4

我现在“gem yanked”3.4.0,稍后会进行调查。抱歉造成破损。

4

我们是否还能够撤回 3.4.0 gem 的所有特定于平台的版本?

我看到特定于平台的 3.4 gems 仍然被拉下来。

(例如,

在 ruby​​gems 上,所有这些宝石仍然存在:

3.4.0 - August 16, 2017 x86_64-linux (1.09 MB)
3.4.0 - August 16, 2017 x64-mingw32 (1.19 MB)
3.4.0 - August 16, 2017 x86-linux (986 KB)
3.4.0 - August 16, 2017 x86-mingw32 (1.11 MB)
3.4.0 - August 17, 2017 universal-darwin (980 KB)
3.4.0 - August 16, 2017 (223 KB) yanked

7

把他们全都拉了。

4

为 linux/windows 推送了 3.4.0.1 gems。您能测试一下这次是否有效吗?

7

我在 darwin 和 linux 上使用 3.4.0.1 进行了绿色构建。没有加载错误。

3

看来我又搞砸了达尔文本地人。将再次拉出并上传 3.4.0.2。

2

已确认,google-protobuf-3.4.0.1-universal-darwin.gem 筹集资金LoadError: cannot load such file -- google/protobuf

8

3.4.0.2 现在应该修复这些问题。如果仍有问题,请随时打开它。

1

我在 google-protobuf 3.6.1 中遇到了这个问题。如果我遗漏了什么,请告诉我。

测试于下午 3:41 开始...bundle.bat exec C:\Ruby26-x64\bin\ruby.exe -EUTF-8 C:\Ruby26-x64\bin\cucumber "C:/Users/Swathi Bala/RubymineProjects /untitled/Features/Cucumberfile.feature" --format Teamcity::Cucumber::Formatter --expand --name "^成功登录 www.demo.guru99.com\/V4\/$" --color -r功能回溯(最近一次调用最后一次):31:来自 C:/Ruby26-x64/bin/cucumber:23:in <main>' 30: from C:/Ruby26-x64/bin/cucumber:23:inload' 29:来自 C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/ cucumber-4.0.0.rc.1/bin/cucumber:7:in <top (required)>' 28: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/cucumber-4.0.0.rc.1/bin/cucumber:7:inrequire' 27: 来自 C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/cucumber-4.0.0.rc.1 /lib/cucumber/cli/main.rb:4:in <top (required)>' 26: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/cucumber-4.0.0.rc.1/lib/cucumber/cli/main.rb:4:inrequire' 25: 来自 C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/cucumber-4.0.0.rc.1/lib/ cucumber.rb:6:in <top (required)>' 24: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/cucumber-4.0.0.rc.1/lib/cucumber.rb:6:inrequire' 23: 来自 C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/cucumber-4.0.0.rc.1/lib/cucumber/runtime.rb:9 :在<top (required)>' 22: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/cucumber-4.0.0.rc.1/lib/cucumber/runtime.rb:9:in要求'21:来自C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/cucumber-4.0.0.rc.1/lib/cucumber/filters.rb:3:在<top (required)>' 20: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/cucumber-4.0.0.rc.1/lib/cucumber/filters.rb:3:in要求'19 :来自 C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/cucumber-4.0.0.rc.1/lib/cucumber/filters/activate_steps.rb:4:in <top (required)>' 18: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/cucumber-4.0.0.rc.1/lib/cucumber/filters/activate_steps.rb:4:inrequire' 17:来自 C :/Ruby26-x64/lib/ruby/gems/2.6.0/gems/cucumber-4.0.0.rc.1/lib/cucumber/step_match.rb:3:in <top (required)>' 16: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/cucumber-4.0.0.rc.1/lib/cucumber/step_match.rb:3:inrequire' 15: 来自 C:/Ruby26-x64 /lib/ruby/gems/2.6.0/gems/cucumber-4.0.0.rc.1/lib/cucumber/multiline_argument.rb:4:in <top (required)>' 14: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/cucumber-4.0.0.rc.1/lib/cucumber/multiline_argument.rb:4:inrequire' 13: 来自 C:/Ruby26-x64/lib/ruby/ gems/2.6.0/gems/cucumber-4.0.0.rc.1/lib/cucumber/multiline_argument/data_table.rb:4:in <top (required)>' 12: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/cucumber-4.0.0.rc.1/lib/cucumber/multiline_argument/data_table.rb:4:inrequire' 11: 来自 C:/Ruby26-x64/lib/ruby/gems/2.6 .0/gems/cucumber-4.0.0.rc.1/lib/cucumber/gherkin/data_table_parser.rb:3:in <top (required)>' 10: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/cucumber-4.0.0.rc.1/lib/cucumber/gherkin/data_table_parser.rb:3:inrequire' 9: 来自 C:/Ruby26-x64/lib/ruby/gems/2.6.0/ gems/gherkin-6.0.15/lib/gherkin/gherkin.rb:3:in <top (required)>' 8: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/gherkin-6.0.15/lib/gherkin/gherkin.rb:3:inrequire' 7: 来自 C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/gherkin-6.0.15/lib /gherkin/protobuf_cucumber_messages.rb:1:in <top (required)>' 6: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/gherkin-6.0.15/lib/gherkin/protobuf_cucumber_messages.rb:1:inrequire' 5: 来自 C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/cucumber-messages-2.0.0/lib/cucumber/messages.rb: 1:在<top (required)>' 4: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/cucumber-messages-2.0.0/lib/cucumber/messages.rb:1:in要求'3:来自C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/cucumber-messages-2.0.0/lib/cucumber/messages_pb.rb:4:在<top (required)>' 2: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/cucumber-messages-2.0.0/lib/cucumber/messages_pb.rb:4:in要求'1:来自 C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/google-protobuf-3.6.1-x64-mingw32/lib/google/protobuf.rb:48:in <top (required)>' C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/google-protobuf-3.6.1-x64-mingw32/lib/google/protobuf.rb:48:inrequire': 无法加载此类文件-- google/2.6/protobuf_c (LoadError) 32: 来自 C:/Ruby26-x64/bin/cucumber:23:in <main>' 31: from C:/Ruby26-x64/bin/cucumber:23:inload' 30: 来自 C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems /cucumber-4.0.0.rc.1/bin/cucumber:7:in <top (required)>' 29: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/cucumber-4.0.0.rc.1/bin/cucumber:7:inrequire' 28: 来自 C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/cucumber-4.0.0.rc。 1/lib/cucumber/cli/main.rb:4:in <top (required)>' 27: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/cucumber-4.0.0.rc.1/lib/cucumber/cli/main.rb:4:inrequire' 26: 来自 C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/cucumber-4.0.0.rc.1/lib /cucumber.rb:6:in <top (required)>' 25: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/cucumber-4.0.0.rc.1/lib/cucumber.rb:6:inrequire' 24: 来自 C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/cucumber-4.0.0.rc.1/lib/cucumber/runtime.rb: 9:在<top (required)>' 23: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/cucumber-4.0.0.rc.1/lib/cucumber/runtime.rb:9:inrequire'22 中:来自 C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/cucumber-4.0。0.rc.1/lib/cucumber/filters.rb:3:in<top (required)>' 21: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/cucumber-4.0.0.rc.1/lib/cucumber/filters.rb:3:in要求'20:来自C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/cucumber-4.0.0.rc.1/lib/cucumber/filters/activate_steps.rb:4:在<top (required)>' 19: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/cucumber-4.0.0.rc.1/lib/cucumber/filters/activate_steps.rb:4:in要求'18中:来自 C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/cucumber-4.0.0.rc.1/lib/cucumber/step_match.rb:3:in <top (required)>' 17: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/cucumber-4.0.0.rc.1/lib/cucumber/step_match.rb:3:inrequire' 16: 来自 C:/ Ruby26-x64/lib/ruby/gems/2.6.0/gems/cucumber-4.0.0.rc.1/lib/cucumber/multiline_argument.rb:4:in <top (required)>' 15: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/cucumber-4.0.0.rc.1/lib/cucumber/multiline_argument.rb:4:inrequire' 14: 来自 C:/Ruby26-x64/lib /ruby/gems/2.6.0/gems/cucumber-4.0.0.rc.1/lib/cucumber/multiline_argument/data_table.rb:4:in <top (required)>' 13: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/cucumber-4.0.0.rc.1/lib/cucumber/multiline_argument/data_table.rb:4:inrequire' 12: 来自 C:/Ruby26-x64/lib/ruby/ gems/2.6.0/gems/cucumber-4.0.0.rc.1/lib/cucumber/gherkin/data_table_parser.rb:3:in <top (required)>' 11: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/cucumber-4.0.0.rc.1/lib/cucumber/gherkin/data_table_parser.rb:3:inrequire' 10: 来自 C:/Ruby26-x64/lib/ruby/gems/2.6 .0/gems/gherkin-6.0.15/lib/gherkin/gherkin.rb:3:in <top (required)>' 9: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/gherkin-6.0.15/lib/gherkin/gherkin.rb:3:inrequire' 8: 来自 C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/gherkin-6.0。 15/lib/gherkin/protobuf_cucumber_messages.rb:1:in <top (required)>' 7: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/gherkin-6.0.15/lib/gherkin/protobuf_cucumber_messages.rb:1:inrequire' 6: 来自 C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/cucumber-messages-2.0.0/lib/cucumber/messages .rb:1:in <top (required)>' 5: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/cucumber-messages-2.0.0/lib/cucumber/messages.rb:1:inrequire' 4: 来自 C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/cucumber-messages-2.0.0/lib/cucumber/messages_pb.rb:4:in <top (required)>' 3: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/cucumber-messages-2.0.0/lib/cucumber/messages_pb.rb:4:inrequire ' 2:来自 C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/google-protobuf-3.6.1-x64-mingw32/lib/google/protobuf.rb:47:in<top (required)>' 1: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/google-protobuf-3.6.1-x64-mingw32/lib/google/protobuf.rb:50:in救援 <top (必需)>' C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/google-protobuf-3.6.1-x64-mingw32/lib/google/protobuf.rb:50:in `require' :无法加载此类文件 - google/protobuf_c (LoadError)

进程已完成,退出代码为 1

8

@blowmage @liujisi 你知道这个改变的解决办法是什么吗?

4

gem google-protobuf 3.6.1 没有针对 Ruby 2.6 的预编译文件。您应该使用 3.7.0.rc.2 gem,或者安装 gem,以便--platform=ruby在安装时为 Ruby 2.6 编译 gem。请参阅#5161 中讨论的解决方法。

0

读错了。似乎 3.7.0.rc.2 对于 ruby​​ 2.6 来说没问题。

4

同样的错误:docker:ruby:2.6.5-alpine3.10 gem“google-protobuf”,“3.11.2”,平台:[“ruby”]

1

我们可以重新打开问题@TeBoring 吗?

4

@OpakAlex 你能打开一个包含所有相关细节的新问题吗?错误可能相同,但原因可能不同。您可以提供的信息越多(包括最少的复制品)越好。

1

@bloomage 谢谢你的回答。我在这里创建了一个问题示例:https://github.com/OpakAlex/reproduct-google-protobuf-gem-issue 它只发生在 docker 中,所以我添加了 docker 文件,并添加了自述文件。

我之后遇到的问题docker build .

/bundle/ruby/2.6.0/gems/google-protobuf-3.11.2/lib/google/protobuf.rb:51:in `require': Error relocating /bundle/ruby/2.6.0/gems/google-protobuf-3.11.2/lib/google/protobuf_c.so: __va_copy: symbol not found - /bundle/ruby/2.6.0/gems/google-protobuf-3.11.2/lib/google/protobuf_c.so (LoadError)
    from /bundle/ruby/2.6.0/gems/google-protobuf-3.11.2/lib/google/protobuf.rb:51:in `rescue in <top (required)>'
    from /bundle/ruby/2.6.0/gems/google-protobuf-3.11.2/lib/google/protobuf.rb:48:in `<top (required)>'
    from -e:1:in `require'
/bundle/ruby/2.6.0/gems/google-protobuf-3.11.2/lib/google/protobuf.rb:49:in `require': cannot load such file -- google/2.6/protobuf_c (LoadError)
    from /bundle/ruby/2.6.0/gems/google-protobuf-3.11.2/lib/google/protobuf.rb:49:in `<top (required)>'
    from -e:1:in `require'

@blowmage 有机会调查一下吗?

9

我不知道根本问题是什么,但降级到 google-protobuf 版本 3.9 可能对您有用。导致此问题的原因似乎已在 3.10.1 中引入。

但同样,这个问题已经结束了。无论是什么原因造成的,都与这个问题不同。请打开一个新问题,链接到此问题,并提供所有相关详细信息,以便处理此 gem 的人员可以获得修复它所需的信息。

这是我发现使用相同的 docker 镜像在 Alpine 上运行的内容。所有 gem 似乎都安装得很好,但版本 3.9.2 运行,而 3.10.1 则引发。

/ # gem install google-protobuf --version=3.9.2 --platform=ruby
Fetching google-protobuf-3.9.2.gem
Building native extensions. This could take a while...
Successfully installed google-protobuf-3.9.2
1 gem installed
/ # ruby -r 'google/protobuf' -e 'puts "hello"'
hello
/ # gem uninstall google-protobuf
Successfully uninstalled google-protobuf-3.9.2
/ # gem install google-protobuf --version=3.10.1 --platform=ruby
Fetching google-protobuf-3.10.1.gem
Building native extensions. This could take a while...
Successfully installed google-protobuf-3.10.1
1 gem installed
/ # ruby -r 'google/protobuf' -e 'puts "hello"'
Traceback (most recent call last):
    1: from /usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
/usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- google/protobuf (LoadError)
    5: from /usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:34:in `require'
    4: from /usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:130:in `rescue in require'
    3: from /usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:130:in `require'
    2: from /usr/local/bundle/gems/google-protobuf-3.10.1/lib/google/protobuf.rb:49:in `<top (required)>'
    1: from /usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
/usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- google/2.6/protobuf_c (LoadError)
    6: from /usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:34:in `require'
    5: from /usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:130:in `rescue in require'
    4: from /usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:130:in `require'
    3: from /usr/local/bundle/gems/google-protobuf-3.10.1/lib/google/protobuf.rb:48:in `<top (required)>'
    2: from /usr/local/bundle/gems/google-protobuf-3.10.1/lib/google/protobuf.rb:51:in `rescue in <top (required)>'
    1: from /usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
/usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require': Error relocating /usr/local/bundle/gems/google-protobuf-3.10.1/lib/google/protobuf_c.so: __va_copy: symbol not found - /usr/local/bundle/gems/google-protobuf-3.10.1/lib/google/protobuf_c.so (LoadError)
/ # 

3.10.1 似乎确实引入了 的用法__va_copy,这在 musl 上不可用。请参阅https://reviews.llvm.org/D36343

2

3.9 有效。谢谢!

9

@liujisi,所有,我刚刚在使用 v3.14.0 的一些 docker 构建中遇到了相同的错误。按照@blowmage 的建议,降级到 v3.9.2 有帮助。我会重新讨论这个问题。