I was trying to make a simple bash pre-receive hook into Gitlab and got one of this
# pre-receive hook #!/bin/bash `knife node show` # Error /usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.3.5/lib/bundler/rubygems_integration.rb:214:in `block in replace_gem': chef is not part of the bundle. Add it to Gemfile. (Gem::LoadError)
Initially I thought I can change the hook to ruby and will fix it but after I tried all 6 ways to
execute a command according to http://tech.natemurray.com/2007/03/ruby-shell-commands.html
and no luck I looked further into the gem specs for Rails and it looks like you can't load a gem that is not
declared into the Gemfile for your application.
So - what options you have really ? Install all gems and their dependencies into the Rails application Gemfile just to execute a
command ?! Well there is a different way sudo to the rescue :)
# pre-receive hook #!/bin/bash `sudo -u USER_THAT_RUNS_THE_APP knife node show` # also you need to make sure into sudoers that the USER_THAT_RUNS_THE_APP has the right to execute without tty Defaults:USER_THAT_RUNS_THE_APP !requiretty