[DRE-maint] Bug#972702: ruby-bundler: dependency resolution fails for compiled gems

Lucas Kanashiro kanashiro at debian.org
Wed Oct 28 22:02:06 GMT 2020


Thanks to David Rodriguez (our dear bundler upstream maintainer :) I was 
able to workaround the bug locally and understand a bit better what is 
going on.

The source of this problem is this commit:

https://github.com/rubygems/rubygems/commit/226ec115fe503bcc93bffdf5cd3e8a668890b4d8

Quoting David:

"Anyways, the actual check making bundler believe the ffi gem is missing 
extensions is `File.exist?(gem_build_complete_path)`. I believe the idea 
of this check is that bundler/rubygems are not able to know which 
artifacts an extension will generate, so what rubygems does is 
generating this dummy file at a well known path after a successful 
extension compilation, so that it can later check the existence of this 
path when it needs to know whether a gem is missing extensions."

There are 2 workarounds to fix this issue:

1) Create this dummy file.

$ mkdir -p 
/usr/share/rubygems-integration/2.7.0/extensions/x86_64-linux/2.7.0/ffi-1.12.2/ 

$ touch 
/usr/share/rubygems-integration/2.7.0/extensions/x86_64-linux/2.7.0/ffi-1.12.2/gem.build_complete 


After that 'bundle --local' will find the ffi gem.

2) Remove the extension from gemspec.

$ sed -i.bak -e 3d 
/usr/share/rubygems-integration/2.7.0/specifications/ffi-1.12.2.gemspec

After removing the header line containing "# stub: 
ext/ffi_c/extconf.rb", 'bundler --local' also works fine and find the 
ffi gem.

I think the second approach is what we want, and the proper fix would be 
to not include extensions in our gemspecs. We could try to achieve that 
via gem2deb. Any thoughts?

-- 
Lucas Kanashiro



More information about the Pkg-ruby-extras-maintainers mailing list