ruby 让Replayer为特定平台安装gem

r7knjye2  于 2023-10-17  发布在  Ruby
关注(0)|答案(2)|浏览(147)

我使用'fluent-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(和Debugler 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'

记录器不会创建有效的连接,但如果它运行通过,那就太好了
(The这里唯一重要的是Gemfile没有拉入正确版本的msgpack(在我的例子中是1.1.0-x86-mingw32而不是1.1.0

2vuwiymt

2vuwiymt1#

http://bundler.io/man/gemfile.5.html
从上面复制并粘贴:
您可以进一步限制除rbx、jruby和mswin之外的所有平台的平台和版本。
若要指定平台之外的版本,请将版本号(不带版本号)附加到平台。例如,要指定gem只能在Ruby 2.3的平台上使用,请使用:用途:
Ruby_23
完整的平台和支持版本列表包括:
ruby 1.8、1.9、2.0、2.1、2.2、2.3、2.4、2.5
MRI 1.8、1.9、2.0、2.1、2.2、2.3、2.4、2.5
mingw 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”,:platforms =>:mri_18
gem“nokogiri”,:platforms => [:mri_18,:jruby]
所以在你的情况下

gem 'msgpack', :platforms=>:ruby_19
neekobn8

neekobn82#

这个问题现在已经很老了,但我有一个类似的问题,并认为其他人可能会在寻找答案时遇到这个问题。
据我所知,Gemfile platforms选项只允许排除gem;它并不影响gem是在本地编译还是获取预编译的版本,只影响它是否安装在给定的平台上。
即使有预编译版本,也要让Replayer在本地构建gem,方法是添加force_ruby_platform选项,如下所示:

gem 'msgpack', force_ruby_platform: true

请参阅手册页。

相关问题