Installing in a Hosted Environment
Clone this wiki locally
As August mentioned in one of his group postings concerto is really intended to be installed on a server where you have root access so you can affect changes to OS level files (services, gems, etc.) However, I was able to get it working on a hostmonster.com basic, shared hosting account by doing the following. The only drawback is that you'll need something in the cron to check and make sure the "services" are running and if not, restart them.
ssh into your account. Get the concerto code and put it under rails_apps/concerto. Add directories for log and tmp. This grabs the master branch, you might want to switch to the latest release once you git clone it.
mkdir rails_apps cd rails_apps git clone https://github.com/concerto/concerto cd concerto mkdir log mkdir tmp
Set up your hostmonster account for a ruby on rails app, according to https://my.hostmonster.com/cgi/help/rails, by doing the following:
Place the following in your ~/.bashrc file:
export HPATH=$HOME export GEM_HOME=$HPATH/ruby/gems export GEM_PATH=$GEM_HOME:/lib64/ruby/gems/1.9.3 export GEM_CACHE=$GEM_HOME/cache export PATH=$PATH:$HPATH/ruby/gems/bin export PATH=$PATH:$HPATH/ruby/gems
Load those by running
. ~/.bashrc at the shell prompt.
Go into your control panel and add a subdomain called concerto, this will also create a directory under your public_html directory called concerto. We need to remove that directory and replace it with a link (for phusion passenger).
cd cd public_html rmdir concerto ln -s ~/rails_apps/concerto/public concerto
Now we need to set up phusion passenger in the .htaccess file in the ~/public_html/concerto directory. So put the following into that file, but be sure that GEM_HOME (the last line) is set to the ruby/gems folder under your home directory (not my example home directory of home2/mstarrus).
Options -MultiViews PassengerResolveSymlinksInDocumentRoot on #Set this to whatever environment you'll be running in RailsEnv production RackBaseURI / SetEnv GEM_HOME /home2/mstarrus/ruby/gems
You should use a mysql database, but I'm going to use sqlite in this example. Copy over the database configuration file. In your rails_apps/concerto directory, do the following:
cd config cp database.yml.sqlite database.yml cd ..
With the current 0.8.7 version of concerto, I had to fix the protocol for the docsplit gem in the Gemfile, change the line that says
gem 'docsplit', :git => 'git://github.com/augustf/docsplit.git', :branch => 'imagemagick'
gem 'docsplit', :git => 'https://github.com/augustf/docsplit.git', :branch => 'imagemagick'
Run bundle to get everything you need. This will take a while, be patient.
Precompile the assets. This may take a while, be patient.
RAILS_ENV=production bundle exec rake assets:precompile
Now you should be able to browse to your site http://concerto.whatever and after a short wait, see the concerto setup screen.
We still need to get the background services running, so back in your hosting account, create a file called background_services in the rails_apps/concerto folder that contains the following:
export PORT=5000; RAILS_ENV=production bundle exec clockwork lib/cron.rb >> log/clock-1.log 2>&1 & echo \$! > tmp/clock.1.pid export PORT=5100; RAILS_ENV=production bundle exec rake jobs:work >> log/worker-1.log 2>&1 & echo \$! > tmp/worker.1.pid
Then run the following to make it executable, and kick it off.
chmod u+x background_services ./background_services
You can check to see if they are running by running
ps -ef as shown here:
email@example.com [~/rails_apps/concerto]# ps -ef UID PID PPID C STIME TTY TIME CMD mstarrus 17384 17321 0 10:12 pts/1 00:00:00 -bash mstarrus 17414 17384 0 11:07 pts/1 00:00:00 ps -ef mstarrus 24042 1 0 10:14 pts/1 00:00:17 ruby /home2/mstarrus/rails_apps/concerto/vendor/bundle/ruby/1.9.3/bin/clockwork lib/cron.rb mstarrus 24043 1 0 10:14 pts/1 00:00:30 ruby /home2/mstarrus/rails_apps/concerto/vendor/bundle/ruby/1.9.3/bin/rake jobs:work
It appears that these services died overnight for my testing, so you might want to create a cron job that looks for these and if it doesn't find them, then kick them off again.