Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

When installing gems via bundler, they have an incorrect shebang #3

Closed
nevir opened this Issue August 16, 2011 · 15 comments

3 participants

Ian MacLeod Michal Papis Craig Buchek
Ian MacLeod

My environment:

  • OS X Lion
  • rvm-managed ruby 1.9.2-p290

From a clean install w/o gems in the current rvm gemset:

$ gem install rubygems-bundler
$ gem install bundler
$ gem install rake

$ head -1 `which bundle`
#!/usr/bin/env bundler_wrapper
$ head -1 `which rake`
#!/usr/bin/env bundler_wrapper

$ echo -e "source 'http://rubygems.org'\ngem 'compass'" > Gemfile

$ bundle

$ head -1 `which sass`
#!/usr/bin/env ruby
$ head -1 `which compass`
#!/usr/bin/env ruby
Michal Papis
Owner

most likely you have a setting BUNDLE_BIN in ~/.bundle/config or in you environment.

using rubygems-bundler does not affect binaries generated by bundler.

You should turn of that BUNDLE_BIN variable as bundler provided binaries are no longer required for proper working when using rubygems-bundler gem.

Ian MacLeod

No to both of those :(

$ env | grep BUNDLE_BIN
$ cat ~/.bundle/config
cat: ~/.bundle/config: No such file or directory
Ian MacLeod

It doesn't look like it's the traditional bundler-binstubs:

gem install sass
cat `which sass`

outputs https://gist.github.com/1150397

gem uninstall sass
echo -e "source 'http://rubygems.org'\ngem 'sass'" > Gemfile
bundle
cat `which sass`

outputs https://gist.github.com/1150403 - identical except for the shebang

gem uninstall sass
bundle --binstubs
cat bin/sass

outputs https://gist.github.com/1150405 - the bundler binstub

Michal Papis
Owner

and what is the output of

bundle config bin

bundle should generate wrappers only when the bin is set. if it is generating binaries in other cases it might mean there is a bug ...

for interactive help you can join me on #rubygems-bundler IRC channel on freenode.

Michal Papis
Owner

so this is issue with rubygems, I will check with newest version, thanks

Ian MacLeod

Ah, alright. Thanks for looking into this!

Also:

$ gem -v
1.8.6
Craig Buchek

I'm having the same problem, with a similar setup. Only difference is that I'm running RubyGems 1.8.8 and RVM. I haven't been able to track down where the problem is in the code, but I suspect that it's in the way Bundler does the gem install -- via a Ruby call instead of the command line.

As a work-around, I've been running gem regenerate_binstubs after every bundle install.

Other than that, I think the plugin is great. Thanks!

Michal Papis
Owner

After checking it looks like bundler does not run rubygems plugins, I'm not sure if that is a bug or feature ...

rubygems-bundler uses shebang customization backported from rubygems 1.9, and in 1.9 backporting via rubygems plugin will be not needed - so then it should be working.

For now please use gem regenerate_binstubs as it will solve this problem.

One of main goals of rubygems-bundler is backporting so I will investigate this issue in free time to provide solution to make your life easier.

Craig Buchek

OK, I dug deeper, and found that Rubygems only loads plugins when the gem command is run (i.e. when rubygems/gem_runner is loaded). Since neither Bundler nor RubyGems loads that file (except from the gem binary), the rubygems-bundler hooks do not get loaded.

Ian MacLeod

Might be worth bringing this up with the bundler guys? They probably want to keep gem-based behavior the same

Craig Buchek

I think Rubygems would be the right place to "fix" the problem of hooks only being called when invoked via the gem command.

Michal Papis
Owner

I think it might be fixed with this change bundler/bundler#1364 could someone confirm ?

Michal Papis
Owner

I have tried the above with bundler 1.0.21 (manually applied the changes over installed gem) and it worked fine, I could not get bundler 1.1pre working - but as soon it will be functional this will work as expected.

Michal Papis mpapis closed this October 23, 2011
Michal Papis
Owner

just to make things easier I have released today mpapis-bundler 1.0.21 with support for rubygems plugins and depending on rubygems-bundler, the future is now - details http://niczsoft.com/2011/10/no-more-bundle-exec/

Michal Papis
Owner

there was an update to bundler and to my fork - gem "mpapis-bundler", "~> 1.0.21.1" - updated to reflect bundler/bundler#1500 (comment) ... rubygems plugins allowed via Gemfile:

group :never do
  gem "rubygems-bundler"
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.