获取bundler来为特定平台安装gem

问题描述 投票:0回答:2

我使用“flutter-logger”gem 来登录我们的项目,它需要“msgpack”。如果我运行

bundle install
,它会引入
msgpack-1.1.0-x86-mingw32
,这会在 Windows 上需要它时引发异常。

kernel_require.rb:55:in `require': cannot load such file -- msgpack/msgpack (LoadError)

但是这个问题有一个解决方法,只需使用

--platform=ruby
重新安装 gem,如下所示:

gem uninstall msgpack
gem install msgpack --platform=ruby

我尝试将此要求放入 Gemfile 中,如其他地方所示(找不到链接 atm),但它没有执行任何操作(像以前一样安装

msgpack-1.1.0-x86-mingw32
):

gem 'msgpack', :platforms=>:ruby  

我在 Windows 7 上使用 Ruby 1.9.3p551(和捆绑器 v 1.14.6),以防万一。

编辑

为了让每个想要的人都可以自己尝试,我给出了一个示例源。

宝石档案:

source 'http://rubygems.org'

ruby '1.9.3'

gem 'fluent-logger'
gem 'msgpack', :platforms=>:ruby_19 
#for windows local dev msgpack needs to be installed with --platform=ruby

foo.rb

require 'fluent-logger'

logger= Fluent::Logger::FluentLogger.new
#logger.post('idx',{message:'it works'})
puts 'worked'

记录器不会创建有效的连接,但如果它能够运行那就太好了
(这里唯一重要的是 Gemfile 没有引入正确版本的 msgpack(在我的例子中是

1.1.0-x86-mingw32
而不是
1.1.0
))

ruby bundler gemfile
2个回答
2
投票

http://bundler.io/man/gemfile.5.html

从上面复制并粘贴:

您可以按平台和版本进一步限制除 rbx、jruby 和 mswin 之外的所有平台。

要指定平台之外的版本,请将不带分隔符的版本号附加到平台。例如,要指定 gem 只能在 Ruby 2.3 平台上使用,请使用:

红宝石_23

平台和支持版本的完整列表包括:

红宝石 1.8、1.9、2.0、2.1、2.2、2.3、2.4、2.5

核磁共振 1.8、1.9、2.0、2.1、2.2、2.3、2.4、2.5

明格 1.8、1.9、2.0、2.1、2.2、2.3、2.4、2.5

x64_mingw 2.0、2.1、2.2、2.3、2.4、2.5 与群组一样,您可以指定一个或多个平台:

gem "weakling", :platforms => :jruby

gem“ruby-debug”,:平台=>:mri_18

gem "nokogiri", :platforms => [:mri_18, :jruby]

所以对于你的情况,请尝试

gem 'msgpack', :platforms=>:ruby_19

0
投票

这个问题现在已经很老了,但我有一个类似的问题,并认为其他人在寻找答案时可能会遇到这个问题。

据我了解,Gemfile

platforms
选项仅允许排除宝石;它不会影响 gem 是否会被本地编译或者是否会获取预编译版本,只是影响它是否会安装在给定的平台上。

即使有预编译版本,告诉捆绑程序本地构建 gem 的方法是添加

force_ruby_platform
选项,如下所示:

gem 'msgpack', force_ruby_platform: true

请参阅 手册页

© www.soinside.com 2019 - 2024. All rights reserved.