pzin
By:
pzin

Automatic deploy with Git fails on deploy

August 17, 2014 2.8k views

Hi,

I followed this article to deploy a RoR app automatically when I push my changes to the server. I think everything works fine, except on the part of the deployment.

I just do some simple mostly needed commands in a RoR deployment; bundle and rake tasks.

My (taking the example from the tutorial) /var/repo/site.git/hooks/post-receive looks like this:

#!/bin/bash
export PATH=$PATH:/usr/local/rvm/rubies/ruby-2.0.0-p353/bin/ruby
export RAILS_ENV="production"
git --work-tree=/home/rails --git-dir=/home/repo/blog.git checkout -f
cd /home/rails
bundle install
rake db:migrate
rake assets:precompile        
chown -R rails:www-data /home/rails
service unicorn restart

I get three errors, from bundle to the assets precompile:

remote: hooks/post-receive: /usr/local/bin/bundle: /usr/bin/ruby1.8: bad interpreter: No such file or directory
remote: hooks/post-receive: /usr/local/bin/rake: /usr/bin/ruby1.8: bad interpreter: No such file or directory
remote: hooks/post-receive: /usr/local/bin/rake: /usr/bin/ruby1.8: bad interpreter: No such file or directory

If I run those commands or the complete file from the server directly, it works fine, but not if I run it remotely (deploying with Git). I cannot understand why. Strange thing also that Ruby 1.8 appears there. Checking RVM there's just one version of Ruby installed, which is Ruby 2.0.0.

2 Answers

This is most like due to the fact that:

export PATH=$PATH:/usr/local/rvm/rubies/ruby-2.0.0-p353/bin/ruby
export RAILS_ENV="production"

Isn't actually modifying the PATH You'll need to do something like creating a separate script that only exports the new PATH Then in the post-receive script run:

source scriptname.sh
Have another answer? Share your knowledge.