Installing Ruby 2.0 and Rails 4.0.0beta on AWS EC2 Installing Ruby 2.0 and Rails 4.0.0beta on AWS EC2 ruby-on-rails ruby-on-rails

Installing Ruby 2.0 and Rails 4.0.0beta on AWS EC2


Log into your brand new instance:

[19:59:22] paul:~ $ ssh -i ~/.ssh/server.pem ec2-user@your.ip   __|  __|_  )   _|  (     /   Amazon Linux AMI  ___|\___|___|  https://aws.amazon.com/amazon-linux-ami/2012.09-release-notes/

and impersonate the root:

$ sudo su -

You are logged in as root from here. Apply the server updates:

[root@ip-xx ~]# yum update...Complete![root@ip-xx ~]# yum groupinstall "Development Tools"...Install      72 Package(s)...Complete!

Now, this is where it differs from the standard solution. Install RVM but without a distribution of ruby:

[root@ip-xx ~]# \curl -L https://get.rvm.io | bash -s stable  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current                                 Dload  Upload   Total   Spent    Left  Speed100   184  100   184    0     0    135      0  0:00:01  0:00:01 --:--:--   183100 11861  100 11861    0     0   7180      0  0:00:01  0:00:01 --:--:-- 64113Downloading RVM from wayneeseguin branch stable  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current                                 Dload  Upload   Total   Spent    Left  Speed100   124  100   124    0     0    161      0 --:--:-- --:--:-- --:--:--   185100 1615k  100 1615k    0     0   258k      0  0:00:06  0:00:06 --:--:--  401kInstalling RVM to /usr/local/rvm/    Creating group 'rvm'# RVM:  Shell scripts enabling management of multiple ruby environments.# RTFM: https://rvm.io/# HELP: http://webchat.freenode.net/?channels=rvm (#rvm on irc.freenode.net)# Cheatsheet: http://cheat.errtheblog.com/s/rvm/# Screencast: http://screencasts.org/episodes/how-to-use-rvm# In case of any issues read output of 'rvm requirements' and/or 'rvm notes'Installation of RVM in /usr/local/rvm/ is almost complete:  * First you need to add all users that will be using rvm to 'rvm' group,    and logout - login again, anyone using rvm will be operating with `umask u=rwx,g=rwx,o=rx`.  * To start using RVM you need to run `source /etc/profile.d/rvm.sh`    in all your open shell windows, in rare cases you need to reopen all shell windows.# root,##   Thank you for using RVM!#   I sincerely hope that RVM helps to make your life easier and#   more enjoyable!!!## ~Wayne

Let's check that no ruby version is installed:

[root@ip-xx ~]# rvm listrvm rubies# No rvm rubies installed yet. Try 'rvm help install'.

Now, openssl is already installed on the system but is incompatible with setup:

[root@ip-xx ~]# openssl versionOpenSSL 1.0.0k-fips 5 Feb 2013[root@ip-xx ~]# openssl version -dOPENSSLDIR: "/etc/pki/tls"

Attempting to install ruby2 with this version will result in the following error:

[root@ip-xx ~]# rvm install 2.0.0 -- --with-openssl-dir=/etc/pki/tlsFetching yaml-0.1.4.tar.gz to /usr/local/rvm/archives######################################################################## 100.0%Extracting yaml to /usr/local/rvm/src/yaml-0.1.4Prepare yaml in /usr/local/rvm/src/yaml-0.1.4.Configuring yaml in /usr/local/rvm/src/yaml-0.1.4.Compiling yaml in /usr/local/rvm/src/yaml-0.1.4.Installing yaml to /usr/local/rvm/usrInstalling Ruby from source to: /usr/local/rvm/rubies/ruby-2.0.0-p0, this may take a while depending on your cpu(s)...ruby-2.0.0-p0 - #downloading ruby-2.0.0-p0, this may take a while depending on your connection...######################################################################## 100.0%ruby-2.0.0-p0 - #extracting ruby-2.0.0-p0 to /usr/local/rvm/src/ruby-2.0.0-p0ruby-2.0.0-p0 - #extracted to /usr/local/rvm/src/ruby-2.0.0-p0ruby-2.0.0-p0 - #configuringruby-2.0.0-p0 - #compilingruby-2.0.0-p0 - #installing Retrieving rubygems-2.0.3######################################################################## 100.0%Extracting rubygems-2.0.3 ...Removing old Rubygems files...Installing rubygems-2.0.3 for ruby-2.0.0-p0 ...Error running 'env GEM_PATH=/usr/local/rvm/gems/ruby-2.0.0-p0:/usr/local/rvm/gems/ruby-2.0.0-p0@global:/usr/local/rvm/gems/ruby-2.0.0-p0:/usr/local/rvm/gems/ruby-2.0.0-p0@global GEM_HOME=/usr/local/rvm/gems/ruby-2.0.0-p0 /usr/local/rvm/rubies/ruby-2.0.0-p0/bin/ruby /usr/local/rvm/src/rubygems-2.0.3/setup.rb', please read /usr/local/rvm/log/ruby-2.0.0-p0/rubygems.install.logInstallation of rubygems did not complete successfully.Saving wrappers to '/usr/local/rvm/bin'.ruby-2.0.0-p0 - #adjusting #shebangs for (gem irb erb ri rdoc testrb rake).cp: overwrite `/usr/local/rvm/rubies/ruby-2.0.0-p0/bin/gem'? ycp: overwrite `/usr/local/rvm/rubies/ruby-2.0.0-p0/bin/irb'? ycp: overwrite `/usr/local/rvm/rubies/ruby-2.0.0-p0/bin/erb'? ycp: overwrite `/usr/local/rvm/rubies/ruby-2.0.0-p0/bin/ri'? ycp: overwrite `/usr/local/rvm/rubies/ruby-2.0.0-p0/bin/rdoc'? ycp: overwrite `/usr/local/rvm/rubies/ruby-2.0.0-p0/bin/testrb'? ycp: overwrite `/usr/local/rvm/rubies/ruby-2.0.0-p0/bin/rake'? yruby-2.0.0-p0 - #importing default gemsets, this may take time ...Install of ruby-2.0.0-p0 - #complete

Although you'll get ruby2, the "Installation of rubygems did not complete successfully" - notice the warning: "Error running 'env GEM_PATH=..."

Instead, we'll get RVM install a copy of openssl for us (see https://rvm.io/packages/openssl/). The zlib-devel package is required:

[root@ip-xx ~]# yum install zlib-devel...Installed:  zlib-devel.x86_64 0:1.2.5-7.11.amzn1                                                                                  Complete![root@ip-xx ~]# rvm pkg install opensslFetching openssl-1.0.1c.tar.gz to /usr/local/rvm/archivesExtracting openssl to /usr/local/rvm/src/openssl-1.0.1cConfiguring openssl in /usr/local/rvm/src/openssl-1.0.1c.Compiling openssl in /usr/local/rvm/src/openssl-1.0.1c.Installing openssl to /usr/local/rvm/usrPlease note that it's required to reinstall all rubies:    rvm reinstall all --forceUpdating openssl certificates

We can now install ruby2:

[root@ip-xx ~]# rvm reinstall 2.0.0 --with-openssl-dir=/usr/local/rvm/usrRemoving /usr/local/rvm/src/ruby-2.0.0-p0...Removing /usr/local/rvm/rubies/ruby-2.0.0-p0...Installing Ruby from source to: /usr/local/rvm/rubies/ruby-2.0.0-p0, this may take a while depending on your cpu(s)...ruby-2.0.0-p0 - #downloading ruby-2.0.0-p0, this may take a while depending on your connection...ruby-2.0.0-p0 - #extracting ruby-2.0.0-p0 to /usr/local/rvm/src/ruby-2.0.0-p0ruby-2.0.0-p0 - #extracted to /usr/local/rvm/src/ruby-2.0.0-p0ruby-2.0.0-p0 - #configuringruby-2.0.0-p0 - #compilingruby-2.0.0-p0 - #installing Removing old Rubygems files...Installing rubygems-2.0.3 for ruby-2.0.0-p0 ...Installation of rubygems completed successfully.Saving wrappers to '/usr/local/rvm/bin'.ruby-2.0.0-p0 - #adjusting #shebangs for (gem irb erb ri rdoc testrb rake).cp: overwrite `/usr/local/rvm/rubies/ruby-2.0.0-p0/bin/gem'? ycp: overwrite `/usr/local/rvm/rubies/ruby-2.0.0-p0/bin/irb'? ycp: overwrite `/usr/local/rvm/rubies/ruby-2.0.0-p0/bin/erb'? ycp: overwrite `/usr/local/rvm/rubies/ruby-2.0.0-p0/bin/ri'? ycp: overwrite `/usr/local/rvm/rubies/ruby-2.0.0-p0/bin/rdoc'? ycp: overwrite `/usr/local/rvm/rubies/ruby-2.0.0-p0/bin/testrb'? ycp: overwrite `/usr/local/rvm/rubies/ruby-2.0.0-p0/bin/rake'? yruby-2.0.0-p0 - #importing default gemsets, this may take time ...Install of ruby-2.0.0-p0 - #complete Making gemset ruby-2.0.0-p0 pristine.Making gemset ruby-2.0.0-p0@global pristine.[root@ip-xx ~]# ruby -vruby 2.0.0p0 (2013-02-24 revision 39474) [x86_64-linux]

And rails4:

[root@ip-xx ~]# gem install rails -v 4.0.0beta1...28 gems installed[root@ip-xx ~]# gem list*** LOCAL GEMS ***actionmailer (4.0.0.beta1)actionpack (4.0.0.beta1)activemodel (4.0.0.beta1)activerecord (4.0.0.beta1)activerecord-deprecated_finders (0.0.3)activesupport (4.0.0.beta1)arel (4.0.0.beta2)atomic (1.0.1)bigdecimal (1.2.0)builder (3.1.4)bundler (1.3.4)erubis (2.7.0)hike (1.2.1)i18n (0.6.4)io-console (0.4.2)json (1.7.7)mail (2.5.3)mime-types (1.21)minitest (4.3.2)multi_json (1.7.1)polyglot (0.3.3)psych (2.0.0)rack (1.5.2)rack-test (0.6.2)rails (4.0.0.beta1)railties (4.0.0.beta1)rake (10.0.3, 0.9.6)rdoc (4.0.0, 3.12.2)rubygems-bundler (1.1.1)rvm (1.11.3.6)sprockets (2.9.0)sprockets-rails (2.0.0.rc3)test-unit (2.0.0.0)thor (0.17.0)thread_safe (0.1.0)tilt (1.3.6)treetop (1.4.12)tzinfo (0.3.37)

That's all folks!


Here is a variant with rbenv.

SSH into your brand new instance:

   __|  __|_  )   _|  (     /   Amazon Linux AMI  ___|\___|___|https://aws.amazon.com/amazon-linux-ami/2012.09-release-notes/There are 16 security update(s) out of 57 total update(s) availableRun "sudo yum update" to apply all updates.Amazon Linux version 2013.03 is available.[jimjh ~]$ ruby --versionruby 1.9.3p286 (2012-10-12 revision 37165) [x86_64-linux]

Impersonate the root and apply server updates:

$> sudo su -$> yum update

Install couple of packages:

$> yum install git pcre pcre-devel

Clone rbenv:

$> git clone git://github.com/sstephenson/rbenv.git /usr/local/rbenv

Create the following file:

# /etc/profile.d/rbenv.shexport RBENV_ROOT=/usr/local/rbenvexport PATH="${RBENV_ROOT}/bin:$PATH"eval "$(rbenv init -)"

Install ruby-build:

$> . /etc/profile$> git clone https://github.com/sstephenson/ruby-build.git /usr/local/rbenv/plugins/ruby-build

Install ruby:

$> rbenv install 2.0.0-p195  # wait ...$> rbenv global 2.0.0-p195$> rbenv rehash

Update rubygems and install passenger:

$> gem update --system$> gem install bundler     $> gem install passenger

Install nginx through passenger:

$> passenger start

At the time of writing, the latest version of passenger is 4.0.0, which works with ruby 2.0.0.

Elastic BeanstalkIf you are using Elastic Beanstalk, stop passenger

$> sudo service passenger stop

Initialize rbenv by adding the following to /opt/elasticbeanstalk/support/envvars.d/appenv

. /etc/profile.d/rbenv.sh

Start passenger

$> sudo service passenger start