I've setup a post-update hook for my project. I have a bare repository (/var/git/myproject) which I push to, and a live repository (/var/www/myproject) where my app is running. I also included bundle install
and bundle exec rake db:migrate
to install gems and update db.
Below is my post-update hook
#!/bin/bash
echo "Pulling changes into Live..."
cd /var/www/myproject || exit
unset GIT_DIR
git pull origin master
# check if ruby app
if [ -f /var/www/myproject/Gemfile ];
then
echo " Ruby app detected..."
bundle install --without development test
bundle exec rake db:migrate # migrate database
fi
exec git-update-server-info
When I push my changes though I get the following message (notice the "bundle command not found" error):
martyn@localhost:~/www/myproject$ git push -u origin master
martyn@192.168.0.100's password:
Counting objects: 832, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (783/783), done.
Writing objects: 100% (832/832), 487.70 KiB, done.
Total 832 (delta 434), reused 0 (delta 0)
remote: Pulling changes into Live...
remote: From /var/git/myproject
remote: * branch master -> FETCH_HEAD
remote: Ruby app detected...
remote: hooks/post-update: line 13: bundle: command not found
remote: hooks/post-update: line 14: bundle: command not found
To 192.168.24.100:/var/git/myproject.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin.
Why is bundle not running? I cd
to the live app directory in the script. When I'm in terminal myself and I cd
to the live directory and run bundle install
it works so bundle is there.
Your hook shell ins't the same than the one you logged in (and which has the proper
PATH
)You can try using at the beginning your your hook script:
(See this answer
)
Or you can make sure your script gets the same environment than your current session, by adding in the first lines of your hook:
Or (final alternative) you can add (before calling
bundle
) (for a single-user rvm installation)