After upgrading Ubuntu to 13.04(Raring Ringtail), I started having problems with bundle install and starting server, main concern was libxml2.
I managed to solve the issue using 'rvm pkg' and 'build.config'. Finally I thought of writing those steps used. The entire steps of installing rvm, ruby, libraries with some notes about the issues with lixml2.
Libraries required:
Assuming that user has an UBUNTU machine.
Install below given libraries. ex: $sudo apt-get install curl. Multiple libraries can be installed separated by spaces. You can skip those libraries that are not required. Below given list has most of the common libraries required.
$sudo apt-get install curl build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison
mysql-server mysql-client libmysqlclient-dev libxml2-dev libxslt-dev imagemagick
$ sudo apt-get install libcurl3 libcurl3-gnutls libcurl4-openssl-dev(required for curb)
$ sudo apt-get install graphicsmagick-libmagick-dev-compat (required for RMagick, libmagick9-dev doesn not exists any more)
$ sudo apt-get install libmagickcore-dev libmagickwand-dev (If you get ' wand/MAgickWand.h missing' error)
Installing RVM(https://rvm.io/rvm/install)
$ \curl -L https://get.rvm.io | bash -s stable
Folow instructions if any. I had instructions to add "source ~./profile" in to '~/home/shilesh/.bash_profile'
# making sure that it is loaded for the current instance also
$source ~/.profile
Close out your current shell or terminal session and open a new one (preferred). You may load RVM with the following command:
user$ source ~/.rvm/scripts/rvm
If installation and configuration were successful, RVM should now load whenever you open a new shell. This can be tested by executing the following command which should output 'rvm is a function' as shown below.
user$ type rvm | head -n 1
rvm is a function
Installing ruby
$ rvm list known #This will show the available ruby options.$ rvm install 1.8.7 # This will install Ruby 1.8.7
$ rvm use 1.8.7
$ rvm --default 1.8.7 # makes 1.8.7 as default ruby version.
$ ruby -v # should give you something like ruby 1.8.7
Source code from Git or ?.
You are expected to have ssh keys in .ssh folder of your profile (ex: /home/shilesh/.ssh/id_rsa. And it should have 066 permissions).
$ git clone git@github.com:<project>/<name>.git
# using https will promt for user name and password for each pull and push.
$ git checkout <some_branch> # move to development branch, if not master.
# Edit the values in database.yml with your local mysql server details. If you do not have server ready, update yml file with a user name and password which you will give to the server.
Installing Gems using bundler
Install ruby gems from "http://rubygems.org/pages/download" and install.$gem -v # This might give you 2.0.6 or greater.
If you did not get the correct version to download, use
$ gem update --system 1.3.7 # This will update the gem to 1.3.7 version
$ gem install bundler # Installing Bundler gem
We are ready to install all the gems, this might take some time based on your gems.
$bundle install --local
Database
$ bundle exec rake db:create # This will create database for development
$bundle exec rake db:migrate # Creates schema
$bundle exec rake db:seed # Load default values.
Server
$ bundle exec script/server # Your server should be up now on 3000 port.
Errors:
Failed undefined method "source index for module"
$ gem update --system
# gem install rubygems-update -v 1.3.7
There were cases where installing libxml-ruby fails as,
Installing libxml-ruby (1.1.3)Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.
/home/shilesh/.rvm/rubies/ruby-1.8.7-p374/bin/ruby extconf.rb
checking for socket() in -lsocket... no
checking for gethostbyname() in -lnsl... yes
checking for atan() in -lm... no
checking for atan() in -lm... yes
checking for inflate() in -lz... yes
checking for iconv_open() in -liconv... no
checking for libiconv_open() in -liconv... no
checking for libiconv_open() in -llibiconv... no
checking for iconv_open() in -llibiconv... no
checking for iconv_open() in -lc... yes
checking for xmlParseDoc() in -lxml2... yes
checking for libxml/xmlversion.h... no
checking for libxml/xmlversion.h in /home/shilesh/.rvm/rubies/ruby-1.8.7-p374/include,/home/shilesh/.rvm/rubies/ruby-1.8.7-p374/include/libxml2,/opt/include/libxml2,/usr/local/include/libxml2,/usr/include/libxml2... yes
creating extconf.h
creating Makefile
And then, even after bundler successfully installed all gems, server might fail as,
$ bundle exec script/server=> Booting WEBrick
=> Rails 2.3.17 application starting on http://0.0.0.0:3000
/home/shilesh/.rvm/gems/ruby-1.8.7-p374@izone-1.8.7/gems/nokogiri-1.5.6/lib/nokogiri/nokogiri.so: /usr/lib/i386-linux-gnu/libxslt.so.1: symbol xmlBufUse, version LIBXML2_2.9.0 not defined in file libxml2.so.2 with link time reference - /home/shilesh/.rvm/gems/ruby-1.8.7-p374@izone-1.8.7/gems/nokogiri-1.5.6/lib/nokogiri/nokogiri.so (LoadError)
from /home/shilesh/.rvm/gems/ruby-1.8.7-p374@izone-1.8.7/gems/polyglot-0.3.3/lib/polyglot.rb:63:in `require'
In that case, try to specify the library after getting them with in rvm.
$ rvm pkg install libxml2 --verify-downloads 1
$ bundle config build.libxml-ruby --with-xml2-lib=${HOME}/.rvm/usr/lib --with-xml2-include=${HOME}/.rvm/usr/include/libxml2
$ bundle config build.nokogiri --with-xml2-lib=${HOME}/.rvm/usr/lib --with-xml2-include=${HOME}/.rvm/usr/include/libxml2
Then it is better to re-install all the gems using bundler. I deleted my gemset and created this again. After that installed bundler gem. Did the configurations as mentioned above, then ran bundler.
Everything was working fine then.