chruby icon indicating copy to clipboard operation
chruby copied to clipboard

bundle stderr: /bin/bash: chruby: command not found

Open KamilLelonek opened this issue 10 years ago • 13 comments

DEBUG[20def91d] Command: cd ~/app/releases/20140714154150 && /usr/local/bin/chruby-exec ruby-1.9.3-p547 -- bundle install --binstubs ~/app/shared/bin --path ~/app/shared/bundle --without development test --deployment --quiet
DEBUG[20def91d]     /bin/bash: chruby: command not found
cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing on host 100.200.300.400: bundle exit status: 127
bundle stdout: Nothing written
bundle stderr: /bin/bash: chruby: command not found

KamilLelonek avatar Jul 14 '14 15:07 KamilLelonek

I got the same error. Did you find out why @KamilLelonek ?

hungryzi avatar Sep 02 '14 07:09 hungryzi

I threw away chruby.

KamilLelonek avatar Sep 02 '14 07:09 KamilLelonek

Same issue here. Anyone found the reason?

grzuy avatar Sep 30 '14 17:09 grzuy

Anyone found a solution?

h0jeZvgoxFepBQ2C avatar Nov 24 '14 10:11 h0jeZvgoxFepBQ2C

Also getting this. Logging into the server and running chruby-exec works fine...

cannikin avatar Dec 08 '14 05:12 cannikin

I had to set :pty, true (which is not a good idea). Think it's a chruby-exec problem.

fnordfish avatar Dec 16 '14 16:12 fnordfish

A quick fix to this for those that are having this issue is to add the /etc/profile.d/chruby.sh script as the chruby README suggests:

if [ -n "$BASH_VERSION" ] || [ -n "$ZSH_VERSION" ]; then
  source /usr/local/share/chruby/chruby.sh
fi

This works because if you run chruby-exec from a non-interactive shell (which is what Capistrano does by default unless you set :pty, true) then it will run the sub-shell as a non-interactive, login shell. This means ~/.bashrc will not get loaded but /etc/profile.d will.

There is a pull request for fixing this at postmodern/chruby#250 but it looks like it needs to be updated.

mxhold avatar Dec 19 '14 15:12 mxhold

FWIW we documented this behaviour: http://capistranorb.com/documentation/faq/why-does-something-work-in-my-ssh-session-but-not-in-capistrano/#which-shell-startup-files-do-get-loaded?

leehambley avatar Dec 19 '14 16:12 leehambley

Thanks for the pointers!

fnordfish avatar Dec 19 '14 16:12 fnordfish

For sure that graphic is one that starts only to make sense once you actually understand what it tells you, but it won't teach you anything :-D

leehambley avatar Dec 19 '14 16:12 leehambley

I ran into similar issue, but sudo appears to work fine

› /bin/bash -c '/usr/local/bin/chruby-exec 2.2.3 -- gem -v'
chruby-exec: RUBY and COMMAND required
› /bin/bash -c 'sudo /usr/local/bin/chruby-exec 2.2.3 -- gem -v'
2.4.5.1

lfender6445 avatar Mar 17 '16 17:03 lfender6445

So, I just ran into this bug and researched it all the way down to the root cause.

The script chruby-exec first does a source /usr/local/share/chruby/chruby.sh then does some logic and finally runs exec $SHELL ... chruby ....

This can not work. exec will not carry shell functions to the new fork. This behaviour was changed after shell-shock. Neither the Ubtunu-14.04 nor the Gentoo ~amd64 I have here will carry the chruby shell function in the newly forked shell after exec. So to make it clear, the exec statement clears all the shell functions that chruby-exec previously sourced to function properly.

I can not explain why some users above describe to only see this when using sudo. Perhaps some quirky work-around of the individual distro they are using? Perhaps not using Bash?

source <some-shell-functions>
exec $SHELL -c 'binary-using-shell-functions-above'

... will never work.

baccenfutter avatar Apr 26 '16 14:04 baccenfutter

Proposed fix: remove the exec.

Why exec in the first place? Why not just $SHELL -c "chruby ..."?

baccenfutter avatar Apr 26 '16 14:04 baccenfutter