Project

General

Profile

Bug #13997

Bundler gem binstub broken

Added by hone (Terence Lee) about 3 years ago. Updated almost 3 years ago.

Status:
Closed
Priority:
Normal
Target version:
ruby -v:
ruby 2.5.0preview1 (2017-10-10 trunk 60153) [x86_64-linux]
Backport:
[ruby-core:83202]

Description

Hi,

In Ruby 2.5.0-preview1, I'm seeing the following error if the Rubygems binstub PATH precedes the binstubs from ruby and the Bundler version installed is <= 1.15.4 (what ruby vendors).

/home/hone/.rvm/gems/ruby-2.4.1@global/bin/bundle:22:in `load': /tmp/bundler/lib/ruby/gems/2.5.0/gems/bundler-1.15.4/exe/bundle:4: syntax error, unexpected tSTRING_BEG, expecting keyword_do or '{' or '(' (SyntaxError)
exec "$bindir/ruby" -x "$0" "$@"
                       ^
/tmp/bundler/lib/ruby/gems/2.5.0/gems/bundler-1.15.4/exe/bundle:9: syntax error, unexpected keyword_do_block, expecting end-of-input
Signal.trap("INT") do

The reason for this is because the generated bundler binstub by rubygems runs code like this:

load Gem.bin_path('bundler', 'bundle', '>= 0.a')

The problem is that the binstub from the vendored bundler in ruby is not pure ruby:

#!/bin/sh
# -*- ruby -*-
bindir="${0%/*}"
exec "$bindir/ruby" -x "$0" "$@"

The top of this file is shell and not ruby. Kernel#load chokes on this.

Thanks,
Terence

Also available in: Atom PDF