<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4494660564939106638</id><updated>2012-02-16T00:39:47.697-08:00</updated><category term='ubuntu'/><category term='radrails'/><category term='EC2'/><category term='aptana'/><category term='EBS'/><category term='Amazon'/><category term='AWS'/><title type='text'>Productive with Ruby on Rails (RoR)</title><subtitle type='html'>R-Knowsys Technologies corporate technical blog to share RoR practices based on our experience with RoR since early 2006. The contributors are the developers in our organisation. We welcome people to post to this - please send us a mail to add you to the contributor list.
Our blogs: http://linuxconfig.blogspot.com/, http://rknowsys-ror.blogspot.com/, http://corporatelinux.blogspot.com/
 -- www.rknowsys.com</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://rknowsys-ror.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4494660564939106638/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://rknowsys-ror.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>kc</name><uri>http://www.blogger.com/profile/05313666068473957349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>13</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4494660564939106638.post-8944477527835173285</id><published>2011-07-19T00:37:00.001-07:00</published><updated>2011-07-19T00:37:34.561-07:00</updated><title type='text'>Hosting Ruby on Rails on Amazon AWS with Ruby Enterprise Edition</title><content type='html'>Tutorial on hosting a web application (Ruby on Rails - RoR) on Amazon AWS with EC2, EBS, Ruby Enterprise Edition (REE) and Phusion Passenger (mod_rails).&lt;br&gt;&lt;br /&gt;Author: K. C. Ramakrishna (www.rknowsys.com) &lt;br&gt;&lt;br /&gt;License: GNU-FDL - http://www.gnu.org/licenses/fdl.html&lt;br&gt;&lt;br /&gt;Date: 18-Nov-08&lt;br&gt;&lt;br /&gt;&lt;br&gt;Please mail comments/corrections to kcr AT rknowsys DOT com, kcr AT members DOT fsf DOT org, &lt;br&gt;&lt;br&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;&lt;br /&gt;&lt;font size="3"&gt;Note: This is a follow up to the tutorial on hosting the site with mongrel. &lt;br&gt;This tutorial can be found here: http://docs.google.com/Doc?id=dcn2ckbh_20hk4kc4d4&lt;/font&gt;&lt;/span&gt;&lt;font style="color: rgb(204, 0, 0);" size="3"&gt;&lt;br&gt;You may have to read it for some optimisations of RoR app to use EBS. &lt;/font&gt;&lt;br style="color: rgb(61, 133, 198);"&gt;&lt;br /&gt;&lt;br&gt;Credits and Disclaimer: Quite a bit of stuff exists in various tutorials - especially the part where we configure mysql to use EBS - This excellent tutorial is on AWS resources page (I don't have the exact URL). We just made an effort to consolidate a lot of relevant stuff into one document with a consistent form. This is the general outline you need to follow for any app on AWS.&lt;br&gt;&lt;br&gt;&lt;br /&gt;Background:&lt;br&gt;&lt;br /&gt;&lt;strike&gt;We built a tourism portal in RoR for one of our clients. You have a look at it - - www.tripladder.com&lt;br&gt;&lt;br /&gt;After building it, we were requested to host and manage it for them. Initially we went with knownhost which is OK but a production RoR application needs more RAM than what we get on most VPS plans - especially if we have image processing. We did consider AWS but at that time it did not have EBS and the client did not initially expect enough traffic to justify a 'scalr' managed cluster. We were looking for a replacement to a dedicated server. Once EBS was launched, we immediately decided to move the site to AWS. The Cost-benefit analysis is compelling.&lt;br&gt;&lt;/strike&gt;&lt;br&gt;&lt;span style="background-color: rgb(255, 0, 0);"&gt;Update:&lt;/span&gt;&lt;br&gt;tripladder.com is not live anymore, please look at www.vitalizeu.com but the below process is still good.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;The following tutorial starts off after signing up with AWS and configuring your desktop/laptop to be able to connect to AWS and launch instances i.e. we assume that you have completed the 'Getting Started' section of AWS.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;We have started with the stock Fedora image and modified it to our requirements. We could have used CentOS but Fedora-8 appeared at the top of the list and we went ahead with it.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;The application hosting has the following steps.&lt;br&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt; &lt;li&gt;&lt;br /&gt; Launching an instance.&lt;br /&gt; &lt;/li&gt;&lt;br /&gt; &lt;li&gt;&lt;br /&gt; Installing RoR, gems, plugins...We used rmagick, hence we had to install Imagemagick too.&lt;br /&gt; &lt;/li&gt;&lt;br /&gt; &lt;li&gt;&lt;br /&gt; Installing REE and Phusion (mod_rails)&lt;br&gt;&lt;br /&gt; &lt;/li&gt;&lt;br /&gt; &lt;li&gt;&lt;br /&gt; Installing mysql.&lt;br /&gt; &lt;/li&gt;&lt;br /&gt; &lt;li&gt;&lt;br /&gt; Intalling the application (checkout from subversion).&lt;br /&gt; &lt;/li&gt;&lt;br /&gt; &lt;li&gt;&lt;br /&gt; Creating and attaching a EBS volume. Mysql with data on EBS&lt;br /&gt; &lt;/li&gt;&lt;br /&gt; &lt;li&gt;&lt;br /&gt; Modifying the RoR app to save user upload files to EBS.(&lt;span style="color: rgb(204, 0, 0);"&gt;&lt;font size="3"&gt;&lt;font size="2"&gt;http://docs.google.com/Doc?id=dcn2ckbh_20hk4kc4d4&lt;/font&gt;)&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;br /&gt; &lt;li&gt;&lt;br /&gt; Installing and configuring a production level ferret server&lt;br /&gt; &lt;/li&gt;&lt;br /&gt; &lt;li&gt;&lt;br /&gt; Configuring Apache to serve the application, caching optimisations for performance.&lt;br /&gt; &lt;/li&gt;&lt;br /&gt; &lt;li&gt;&lt;br /&gt; Configuring permanent public IP (covered) and DNS (we have the domain parked with go daddy but this is not covered in this article)&lt;br /&gt; &lt;/li&gt;&lt;br /&gt; &lt;li&gt;&lt;br /&gt; Configuring smtp (email) support for RoR application.&lt;br /&gt; &lt;/li&gt;&lt;br /&gt; &lt;li&gt;&lt;br /&gt; Once we have the perfect server setup, save it to S3.&lt;br /&gt; &lt;/li&gt;&lt;br /&gt; &lt;li&gt;&lt;br /&gt; Periodic automated backups - Using Amazon snapshots.&lt;br&gt;&lt;br /&gt; &lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;u&gt;&lt;font size="3"&gt;1. Launching an instance and logging in:&lt;/font&gt;&lt;/u&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;guest@kc-laptop:~$ ec2-run-instances ami-2b5fba42 -k gsg-keypair -z us-east-1a&lt;br&gt;&lt;br /&gt;RESERVATION&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r-a864bec1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 526262918289&amp;nbsp;&amp;nbsp;&amp;nbsp; default&lt;br&gt;&lt;br /&gt;INSTANCE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i-xxxxxxxx &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ami-2b5fba42&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pending gsg-keypair&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m1.small&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2008-11-09T10:19:29+0000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; us-east-1a&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; aki-a71cf9ce&amp;nbsp;&amp;nbsp;&amp;nbsp; ari-a51cf9cc&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;guest@kc-laptop:~$ ec2-describe-instances i-xxxxxxxx&lt;br&gt;&lt;br /&gt;RESERVATION&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r-a864bec1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 526262918289&amp;nbsp;&amp;nbsp;&amp;nbsp; default&lt;br&gt;&lt;br /&gt;INSTANCE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i-xxxxxxxx &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ami-2b5fba42&amp;nbsp;&amp;nbsp;&amp;nbsp; ec2-xx-xxx-49-xxx.compute-1.amazonaws.com&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; domU-12-31-39-00-68-93.compute-1.internal&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; running gsg-keypair&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m1.small&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2008-11-09T10:19:29+0000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; us-east-1a&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; aki-a71cf9ce&amp;nbsp;&amp;nbsp;&amp;nbsp; ari-a51cf9cc&lt;br&gt;&lt;br&gt;# Authorise access on port 22 for ssh&lt;br&gt;guest@kc-laptop:~$ ec2-authorize default -p 22&lt;br&gt;GROUP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; default&lt;br&gt;PERMISSION&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; default ALLOWS&amp;nbsp; tcp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 22 &amp;nbsp;&amp;nbsp; 22 &amp;nbsp;&amp;nbsp; FROM&amp;nbsp;&amp;nbsp;&amp;nbsp; CIDR&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.0.0.0/0&lt;br&gt;&lt;br&gt;# Authorise access on port 80 for http&lt;br&gt;guest@kc-laptop:~$ ec2-authorize default -p 80&lt;br&gt;GROUP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; default&lt;br&gt;PERMISSION&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; default ALLOWS&amp;nbsp; tcp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 80 &amp;nbsp;&amp;nbsp; 80 &amp;nbsp;&amp;nbsp; FROM&amp;nbsp;&amp;nbsp;&amp;nbsp; CIDR&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.0.0.0/0&lt;br&gt;&lt;br&gt;# Authorise access on port 3306 for mysql admin.&lt;br&gt;guest@kc-laptop:~$ ec2-authorize default -p 3306&lt;br&gt;GROUP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; default&lt;br&gt;PERMISSION&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; default ALLOWS&amp;nbsp; tcp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3306&amp;nbsp;&amp;nbsp;&amp;nbsp; 3306&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM&amp;nbsp;&amp;nbsp;&amp;nbsp; CIDR&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.0.0.0/0&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;u&gt;1.1 Associating a permanent IP address with this instance.&lt;/u&gt;&lt;br&gt;&lt;br&gt;guest@kc-laptop:~$ ec2-allocate-address&lt;br&gt;ADDRESS 75.101.158.167&lt;br&gt;guest@kc-laptop:~$ ec2-associate-address -i i-xxxxxxxx 75.101.158.167&lt;br&gt;ADDRESS 75.101.158.167&amp;nbsp; i-xxxxxxxx&lt;br&gt;&lt;br&gt;&lt;u&gt;1.2 Check by logging in&lt;/u&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;guest@kc-laptop:~$ ssh -i ~/AWS-do-not-delete/id_rsa-gsg-keypair root@ec2-xx-xxx-49-xxx.compute-1.amazonaws.com&lt;br&gt;&lt;br&gt;OR&lt;br&gt;&lt;br&gt;guest@kc-laptop:~$ ssh -i ~/AWS-do-not-delete/id_rsa-gsg-keypair root@75.101.158.167&lt;br&gt;&lt;br /&gt;&lt;br&gt;Server is accessible;&lt;br&gt;Went to godaddy.com (or your registrar) and set the DNS records accordingly:&lt;br&gt;tripladder.com &amp;lt;==&amp;gt; 75.101.158.167&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;u&gt;&lt;font size="3"&gt;2. Updating the system and installing required software&lt;/font&gt;&lt;/u&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;u&gt;2.1 Updating the system&lt;/u&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 ~]# yum update&lt;br&gt;&lt;br /&gt;Updated: fedora-release.noarch 0:8-6.transition&lt;br&gt;&lt;br /&gt;Complete!&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;u&gt;2.2 Installing mysql &lt;/u&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 ~]#&amp;nbsp; yum install mysql mysql-server mysql-devel&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;Installed: mysql-devel.i386 0:5.0.45-6.fc8 mysql-server.i386 0:5.0.45-6.fc8&lt;br&gt;&lt;br /&gt;Dependency Installed: device-mapper-devel.i386 0:1.02.22-1.fc8 e2fsprogs-devel.i386 0:1.40.4-2.fc8 keyutils-libs-devel.i386 0:1.2-2.fc6 krb5-devel.i386 0:1.6.2-14.fc8 libselinux-devel.i386 0:2.0.43-1.fc8 libsepol-devel.i386 0:2.0.15-1.fc8 mysql.i386 0:5.0.45-6.fc8 mysql-libs.i386 0:5.0.45-6.fc8 openssl-devel.i386 0:0.9.8b-17.fc8 perl-DBD-MySQL.i386 0:4.005-2.fc8.1 perl-DBI.i386 0:1.58-2.fc8 zlib-devel.i386 0:1.2.3-14.fc8&lt;br&gt;&lt;br /&gt;Complete!&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;u&gt;2.3 Installing httpd server, tools required for installing REE and subversion (for checking out the code).&lt;/u&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 ~]#&amp;nbsp; yum install gcc-c++&amp;nbsp; httpd httpd-devel subversion&lt;br&gt;&lt;br /&gt;Installed: gcc-c++.i386 0:4.1.2-33 httpd-devel.i386 0:2.2.9-1.fc8 subversion.i386 0:1.4.4-7&lt;br&gt;&lt;br /&gt;Dependency Installed: apr.i386 0:1.2.11-2 apr-devel.i386 0:1.2.11-2 apr-util.i386 0:1.2.10-2.fc8 apr-util-devel.i386 0:1.2.10-2.fc8 cyrus-sasl-devel.i386 0:2.1.22-8.fc8 db4-cxx.i386 0:4.6.21-2.fc8 db4-devel.i386 0:4.6.21-2.fc8 expat-devel.i386 0:2.0.1-2 httpd.i386 0:2.2.9-1.fc8 httpd-tools.i386 0:2.2.9-1.fc8 libstdc++-devel.i386 0:4.1.2-33 neon.i386 0:0.27.2-2 openldap-devel.i386 0:2.3.39-4.fc8 perl-URI.noarch 0:1.35-3.1&lt;br&gt;&lt;br /&gt;Updated: db4.i386 0:4.6.21-2.fc8 openldap.i386 0:2.3.39-4.fc8&lt;br&gt;&lt;br /&gt;Complete!&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;u&gt;2.4 Installing REE &lt;/u&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 ~]# mkdir software&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 ~]# cd software/&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 software]# wget http://rubyforge.org/frs/download.php/41040/ruby-enterprise-1.8.6-20080810.tar.gz&lt;br&gt;&lt;br /&gt;05:28:36 (3.66 MB/s) - `ruby-enterprise-1.8.6-20080810.tar.gz' saved [6431918/6431918]&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 software]# tar xzf ruby-enterprise-1.8.6-20080810.tar.gz&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 software]# ./ruby-enterprise-1.8.6-20080810/installer&lt;br&gt;&lt;br /&gt;[/opt/ruby-enterprise-1.8.6-20080810] :&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;## kc - Choose a path - I chose the default as mentioned above. Type 'yes' to all questions.&lt;br&gt;&lt;br /&gt;## kc -&amp;nbsp;&amp;nbsp;&amp;nbsp; You will get a confirmation after REE has been successfully installed.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;u&gt;2.4.1 Uploading the keys to EC2 instance - this will enable you to run AWS commands right from the instance. &lt;/u&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 ~]# mkdir .ec2&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;# Now go back to a terminal on your laptop/desktop:&lt;br&gt;&lt;br /&gt;guest@kc-laptop:~$ scp -i ~/AWS-do-not-delete/id_rsa-gsg-keypair&amp;nbsp; /home/guest/AWS-do-not-delete/EC2-keys/pk-IFMHVYZ47LTIHHLIHU4A5X6SVULFXV3D.pem root@tripladder.com:&lt;br&gt;&lt;br /&gt;pk-IFMHVYZ47LTIHHLIHU4A5X6SVULFXV3D.pem&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 100%&amp;nbsp; 922&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.9KB/s&amp;nbsp;&amp;nbsp; 00:00&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;guest@kc-laptop:~$ scp -i ~/AWS-do-not-delete/id_rsa-gsg-keypair&amp;nbsp; /home/guest/AWS-do-not-delete/EC2-keys/cert-IFMHVYZ47LTIHHLIHU4A5X6SVULFXV3D.pem&amp;nbsp; root@tripladder.com:&lt;br&gt;&lt;br /&gt;cert-IFMHVYZ47LTIHHLIHU4A5X6SVULFXV3D.pem&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 100%&amp;nbsp; 916&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.9KB/s&amp;nbsp;&amp;nbsp; 00:00&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 ~]# mv cert-IFMHVYZ47LTIHHLIHU4A5X6SVULFXV3D.pem .ec2/&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 ~]# mv pk-IFMHVYZ47LTIHHLIHU4A5X6SVULFXV3D.pem .ec2/&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;u&gt;2.4.2 Install latest and full version of AWS tools on the instance&lt;/u&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;We need Java for the AWS APIs:&lt;br&gt;[root@domU-12-31-39-00-68-93 software]# wget &amp;lt;Java Dk - jdk-6u10-linux-i586.bin&amp;gt;&lt;br&gt;[root@domU-12-31-39-00-68-93 software]# bash jdk-6u10-linux-i586.bin&lt;br&gt;&lt;br&gt;# kc - Java has been installed to /root/software/jdk1.6.0_10/&lt;br&gt;# - We need to put it into .bash_profile&lt;br&gt;&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 ~]# cd software/&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 software]#&amp;nbsp; wget http://s3.amazonaws.com/ec2-downloads/ec2-api-tools.zip&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 software]# unzip -q ec2-api-tools.zip&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;u&gt;2.4.3 Set some environment variables for convenience&lt;/u&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;# kc - Note: Because we installed REE and not the native (yum install ruby) we need to make a small modification for ruby-lib-paths&lt;br&gt;&lt;br /&gt;# We need to put in some stuff in the bash_profile for some things - these are indicated in the comments below:&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 ~]# vi .bash_profile&lt;br&gt;&lt;br /&gt;# kc start - 09Nov08 - for enterprise ruby&lt;br&gt;&lt;br /&gt;PATH=/opt/ruby-enterprise-1.8.6-20080810/bin:$PATH&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;#http://developer.amazonwebservices.com/connect/thread.jspa?threadID=12491&lt;br&gt;&lt;br /&gt;# Because we have REE instead of 'yum install ruby'&lt;br&gt;&lt;br /&gt;export RUBYLIB=/usr/lib/site_ruby&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;# kc end - 09Nov08 - for enterprise ruby&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;# kc start - 09Nov08 - for EC2 tools&lt;br&gt;&lt;br /&gt;export EC2_HOME=/root/software/ec2-api-tools-1.3-26369&lt;br&gt;&lt;br /&gt;export EC2_PRIVATE_KEY=~/.ec2/pk-5YPLCLZG2ZBEKNWCTWESOHEOMACLCZTN.pem&lt;br&gt;&lt;br /&gt;export EC2_CERT=~/.ec2/cert-5YPLCLZG2ZBEKNWCTWESOHEOMACLCZTN.pem&lt;br&gt;&lt;br /&gt;PATH=$PATH:$EC2_HOME/bin&lt;br&gt;export JAVA_HOME=/root/software/jdk1.6.0_10/jre&lt;br&gt;&lt;br /&gt;# kc start - 09Nov08 - for EC2 tools&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 ~]# source .bash_profile&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 software]# source ~/.bash_profile&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;u&gt;2.4.4 Installing Passenger and configuring it for the previously installed http server&lt;/u&gt;&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 ~]# gem install --no-ri --no-rdoc passenger&lt;br&gt;&lt;br /&gt;Building native extensions.&amp;nbsp; This could take a while...&lt;br&gt;&lt;br /&gt;Successfully installed passenger-2.0.3&lt;br&gt;&lt;br /&gt;1 gem installed&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 ~]# passenger-install-apache2-module&lt;br&gt;&lt;br /&gt;# kc - accept default values and let the installation finish - It will take some time so be patient.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;u&gt;2.4.5 Installing some ruby gems and related software&lt;/u&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;b&gt;# - strictly speaking this is not necessary but some gems check for availablity of rails-2.0.2 before installing so we might as well get it installed. Especially ferret checks for rails 2.0.2 before it starts.&lt;/b&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 tripladder]#&amp;nbsp; gem install --no-ri --no-rdoc rails -v=2.0.2&lt;br&gt;&lt;br /&gt;Bulk updating Gem source index for: http://gems.rubyforge.org&lt;br&gt;&lt;br /&gt;Successfully installed rails-2.0.2&lt;br&gt;&lt;br /&gt;Successfully installed rake-0.8.2&lt;br&gt;&lt;br /&gt;Successfully installed activesupport-2.0.2&lt;br&gt;&lt;br /&gt;Successfully installed activerecord-2.0.2&lt;br&gt;&lt;br /&gt;Successfully installed actionpack-2.0.2&lt;br&gt;&lt;br /&gt;Successfully installed actionmailer-2.0.2&lt;br&gt;&lt;br /&gt;Successfully installed activeresource-2.0.2&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;b&gt;&lt;br /&gt;All below gems are required for our app - You may install based on your application:&lt;/b&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 ~]# gem install --no-rdoc --no-ri actionwebservice&amp;nbsp; -v=1.2.6&lt;br&gt;&lt;br /&gt;Successfully installed activesupport-1.4.4&lt;br&gt;&lt;br /&gt;Successfully installed actionpack-1.13.6&lt;br&gt;&lt;br /&gt;Successfully installed activerecord-1.15.6&lt;br&gt;&lt;br /&gt;Successfully installed actionwebservice-1.2.6&lt;br&gt;&lt;br /&gt;4 gems installed&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 ~]# gem install --no-rdoc --no-ri ferret&amp;nbsp; -v=0.11.4&lt;br&gt;&lt;br /&gt;Building native extensions.&amp;nbsp; This could take a while...&lt;br&gt;&lt;br /&gt;Successfully installed ferret-0.11.4&lt;br&gt;&lt;br /&gt;1 gem installed&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 tripladder]# gem install --no-rdoc --no-ri acts_as_ferret -v=0.4.3&lt;br&gt;&lt;br /&gt;Successfully installed acts_as_ferret-0.4.3&lt;br&gt;&lt;br /&gt;1 gem installed&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;2.5.6 Installing Imagemagick and rmagick - This step gave me a lot of trouble - do these with a lot of care&lt;br&gt;&lt;br /&gt;# &lt;span style="color: rgb(0, 0, 0);"&gt;See this tutorial: http://rmagick.rubyforge.org/install-faq.html&lt;/span&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 software]# yum install ghostscript-devel ghostscript ghostscript-font&lt;br&gt;&lt;br /&gt;Installed: ghostscript-devel.i386 0:8.63-1.fc8&lt;br&gt;&lt;br /&gt;Dependency Installed: ghostscript.i386 0:8.63-1.fc8 ghostscript-fonts.noarch 0:5.50-18.fc8 jasper-libs.i386 0:1.900.1-7.fc8 libXfont.i386 0:1.3.1-2.fc8 libfontenc.i386 0:1.0.4-4.fc8 urw-fonts.noarch 0:2.4-3.fc8 xorg-x11-font-utils.i386 1:7.2-2.fc8&lt;br&gt;&lt;br /&gt;Complete!&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 ~]# yum install perl perl-devel *ghostscript* *freetype* *jpeg* *png* *wmf* *tiff* *ghostscript* *lcms* *libexif* * libxml* *zlib* *bzip*&lt;br&gt;&lt;br /&gt;# - There will be lot of activity - just relax and accept all options.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;# - Now get the &lt;i&gt;&lt;u&gt;&lt;b&gt;exact&lt;/b&gt;&lt;/u&gt;&lt;/i&gt; version of Imagemagick and copy it to your 'software' directory.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 software]# scp root@&amp;lt;myserver.com&amp;gt;:software/ImageMagick-6.4.1-0.tar.gz ./&lt;br&gt;&lt;br /&gt;root@rknowsys.com's password:&lt;br&gt;&lt;br /&gt;ImageMagick-6.4.1-0.tar.gz&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 100%&amp;nbsp;&amp;nbsp; 11MB&amp;nbsp;&amp;nbsp; 1.2MB/s&amp;nbsp;&amp;nbsp; 00:09&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 software]# tar xzf ImageMagick-6.4.1-0.tar.gz&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 software]# cd ImageMagick-6.4.1&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 ImageMagick-6.4.1]# ./configure&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;# kc - &lt;b&gt;*Lots*&lt;/b&gt; of activity.....&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 ImageMagick-6.4.1]# make install&lt;br&gt;&lt;br /&gt;# kc - &lt;b&gt;*Lots*&lt;/b&gt; of activity.....&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 ImageMagick-6.4.1]# ln -s /usr/local/lib/* /usr/lib/&lt;br&gt;&lt;br /&gt;ln: creating symbolic link `/usr/lib/pkgconfig': File exists&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 ImageMagick-6.4.1]# mv /usr/lib/pkgconfig/ /root/software/original_pkgcongi_09Nov08&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 ImageMagick-6.4.1]# ln -s /usr/local/lib/pkgconfig/ /usr/lib/&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 ImageMagick-6.4.1]# gem install --no-rdoc --no-ri rmagick -v=2.3.0&lt;br&gt;&lt;br /&gt;Building native extensions.&amp;nbsp; This could take a while...&lt;br&gt;&lt;br /&gt;Successfully installed rmagick-2.3.0&lt;br&gt;&lt;br /&gt;1 gem installed&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;u&gt;&lt;font size="3"&gt;3. Creating and attaching external EBS volume and making it usable&lt;/font&gt;&lt;/u&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;u&gt;3.1 Creating a volume&lt;/u&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;guest@kc-laptop:~$ ec2-create-volume -s 20 -z us-east-1a&lt;br&gt;&lt;br /&gt;VOLUME&amp;nbsp; vol-&amp;lt;my-volume&amp;gt; &amp;nbsp;&amp;nbsp; 20&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; us-east-1a&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; creating&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2008-09-22T10:29:36+0000&lt;br&gt;&lt;br /&gt;guest@kc-laptop:~$ ec2-describe-volumes vol-&amp;lt;my-volume&amp;gt;&lt;br&gt;&lt;br /&gt;VOLUME&amp;nbsp; vol-&amp;lt;my-volume&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 20&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; us-east-1a&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; available&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2008-09-22T10:29:36+0000&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;u&gt;3.2 Attaching the volume to our instance&lt;/u&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;guest@kc-laptop:~$ ec2-attach-volume vol-&amp;lt;my-volume&amp;gt; -i &amp;lt;my-instance&amp;gt; -d /dev/sdh&lt;br&gt;&lt;br /&gt;ATTACHMENT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vol-&amp;lt;my-volume&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;my-instance&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /dev/sdh&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; attaching&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2008-09-22T10:32:38+0000&lt;br&gt;&lt;br /&gt;guest@kc-laptop:~$ ec2-describe-volumes&lt;br&gt;&lt;br /&gt;VOLUME&amp;nbsp; vol-8105e0e8&amp;nbsp;&amp;nbsp;&amp;nbsp; 20&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; us-east-1a&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; in-use&amp;nbsp; 2008-09-22T10:29:36+0000&lt;br&gt;&lt;br /&gt;ATTACHMENT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vol-&amp;lt;my-volume&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;my-instance&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /dev/sdh&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; attached&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2008-09-22T10:32:38+0000&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;u&gt;3.3Making it usable&lt;/u&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-65-E3 ~]# yes | mkfs -t ext3 /dev/sdh&lt;br&gt;&lt;br /&gt;mke2fs 1.40.4 (31-Dec-2007)&lt;br&gt;&lt;br /&gt;/dev/sdh is entire device, not just one partition!&lt;br&gt;&lt;br /&gt;Proceed anyway? (y,n) Filesystem label=&lt;br&gt;&lt;br /&gt;OS type: Linux&lt;br&gt;&lt;br /&gt;Block size=4096 (log=2)&lt;br&gt;&lt;br /&gt;Fragment size=4096 (log=2)&lt;br&gt;&lt;br /&gt;2621440 inodes, 5242880 blocks&lt;br&gt;&lt;br /&gt;262144 blocks (5.00%) reserved for the super user&lt;br&gt;&lt;br /&gt;First data block=0&lt;br&gt;&lt;br /&gt;Maximum filesystem blocks=0&lt;br&gt;&lt;br /&gt;160 block groups&lt;br&gt;&lt;br /&gt;32768 blocks per group, 32768 fragments per group&lt;br&gt;&lt;br /&gt;16384 inodes per group&lt;br&gt;&lt;br /&gt;Superblock backups stored on blocks:&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4096000&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;Writing inode tables: done&lt;br&gt;&lt;br /&gt;Creating journal (32768 blocks): done&lt;br&gt;&lt;br /&gt;Writing superblocks and filesystem accounting information: done&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;This filesystem will be automatically checked every 26 mounts or&lt;br&gt;&lt;br /&gt;180 days, whichever comes first.&amp;nbsp; Use tune2fs -c or -i to override.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-65-E3 ~]# mkdir -p /mnt/data-store&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-65-E3 ~]# mount /dev/sdh /mnt/data-store/&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;u&gt;&lt;font size="3"&gt;4. Ensuring that mysql uses EBS&lt;/font&gt;&lt;/u&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 tripladder]# rmdir /var/lib/mysql/&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 tripladder]# mkdir -p /mnt/data-store/new_mysql_store/&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 tripladder]# ln -s /mnt/data-store/new_mysql_store/ /var/lib/mysql/&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-02-68-78 tripladder]# chown -R mysql:mysql /mnt/data-store/new_mysql_store/&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-65-E3 ~]# service mysqld start&lt;br&gt;&lt;br /&gt;Initializing MySQL database:&amp;nbsp; Installing MySQL system tables...&lt;br&gt;&lt;br /&gt;OK&lt;br&gt;&lt;br /&gt;...&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 tripladder]# ls /mnt/data-store/new_mysql_store/&lt;br&gt;&lt;br /&gt;ibdata1&amp;nbsp; ib_logfile0&amp;nbsp; ib_logfile1&amp;nbsp; mysql&amp;nbsp; mysql.sock .........&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;u&gt;4.1 secure your mysql installation&lt;/u&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-65-E3 ~]# mysql_secure_installation&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;u&gt;4.2 Create your DB&lt;/u&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;# - Now create your DB, Db-user and access privileges to the db-user.&lt;br&gt;&lt;br /&gt;# - You will have to do something like this:&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [root@domU-12-31-39-00-68-93 tripladder]# mysql -u root -p&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mysql&amp;gt; create database &amp;lt;database name&amp;gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Query OK, 1 row affected (0.01 sec)&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mysql&amp;gt; grant all on &amp;lt;database name&amp;gt;.* to '&amp;lt;database-user&amp;gt;'@'localhost' identified by '&amp;lt;database-passwd&amp;gt;';&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Query OK, 0 rows affected (0.00 sec)&lt;br&gt;&lt;br&gt;&lt;u&gt;4.3 Creating a schema or restoring from backup. &lt;b&gt;(Optional) &lt;/b&gt;&lt;/u&gt;You can even do this later.&lt;br&gt;&lt;br&gt;# after creating the database, you will have to create the schema and seed data -&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; You can do this: (Take care to edit the config/database.yml file as shown in the next section before you run rake)&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [root@domU-12-31-39-00-68-93 tripladder]# rake db:migrate RAILS_ENV=production&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OR&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;[root@domU-12-31-39-00-68-93 tripladder]# mysql -u &amp;lt;database-user&amp;gt; -p&amp;nbsp; &amp;lt;database name&amp;gt; &amp;lt; &amp;lt;Path to backup scripts&amp;gt;/backup.sql&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;&lt;br /&gt;&lt;u&gt;4.4 Stop the mysqld&lt;/u&gt;&lt;br&gt;&lt;br&gt;[root@domU-12-31-39-00-68-93 tripladder]# service mysqld stop&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;u&gt;&lt;font size="3"&gt;5. Installing the application&lt;/font&gt;&lt;/u&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 ~]# cd /var/www/html/&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 html]# svn co https://&amp;lt;servername&amp;gt;/svn/tripladder/&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;u&gt;5.1 Configuring the database access credentials&lt;/u&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 html]# cd tripladder/&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 tripladder]# vi config/database.yml&lt;br&gt;&lt;br /&gt;production:&lt;br&gt;&lt;br /&gt;&amp;nbsp; adapter: mysql&lt;br&gt;&lt;br /&gt;&amp;nbsp; database: &amp;lt;database name&amp;gt;&lt;br&gt;&lt;br /&gt;&amp;nbsp; username: &amp;lt;database user&amp;gt;&lt;br&gt;&lt;br /&gt;&amp;nbsp; password: &amp;lt;passwd for database user&amp;gt;&lt;br&gt;&lt;br /&gt;&amp;nbsp; host: localhost&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;u&gt;5.2 Configuring some stuff in environment.rb&lt;/u&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;b&gt;# kc - Note - these configs are spread across the whole file. I am listing out the sections that need changing.&lt;/b&gt;&lt;br&gt;&lt;br /&gt;&lt;b&gt;# - kc Note - Tripladder uses google apps for Intranet and email.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;/b&gt;[root@domU-12-31-39-00-68-93 tripladder]# vi config/environment.rb&lt;br&gt;&lt;br /&gt;ENV['RAILS_ENV'] ||= 'production'&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;RAILS_GEM_VERSION = '2.0.2' unless defined? RAILS_GEM_VERSION&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;# kc start - use google to send our email - 23Sep08&lt;br&gt;&lt;br /&gt;ActionMailer::Base.smtp_settings = {&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; :tls =&amp;gt; true,&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; :address =&amp;gt; "smtp.gmail.com",&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; :port =&amp;gt; "587",&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; :domain =&amp;gt; "tripladder.com",&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; :authentication =&amp;gt; :plain,&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; :user_name =&amp;gt; "&amp;lt;mail-user&amp;gt;@tripladder.com",&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; :password =&amp;gt; "&amp;lt;mail-user-passwd&amp;gt;"&lt;br&gt;&lt;br /&gt;&amp;nbsp; }&lt;br&gt;&lt;br /&gt;# kc end - use google to send our email - 23Sep08&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;u&gt;5.3 Configuring stuff for ferret&lt;/u&gt; &lt;br&gt;&lt;br&gt;# kc - Ferret will give some trouble unless all related directories have the right ownerships/permissions. You may need to iterate here a bit.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;u&gt;5.3.1 Ferret configurations&lt;/u&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 tripladder]# vi config/ferret_server.yml&lt;br&gt;&lt;br /&gt;production:&lt;br&gt;&lt;br /&gt;&amp;nbsp; host: localhost&lt;br&gt;&lt;br /&gt;&amp;nbsp; port: 9010&lt;br&gt;&lt;br /&gt;&amp;nbsp; pid_file: log/ferret.pid&lt;br&gt;&lt;br /&gt;&amp;nbsp; log_file: log/ferret_server.log&lt;br&gt;&lt;br /&gt;&amp;nbsp; log_level: warn&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;# kc - Note - Also comment out rest of the file.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 tripladder]# vi config/environments/ferret_environment.rb&lt;br&gt;&lt;br /&gt;&amp;nbsp; INDEX = Index::Index.new(:path =&amp;gt; '/var/www/html/tripladder/index')&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;b&gt;# - kc - Now we will commit all these files to subversion so that we don't have to keep worrying about this during svn updates (Developers will have to take care to change relevant sections.&lt;br&gt;&lt;br /&gt;&lt;/b&gt;[root@domU-12-31-39-00-68-93 tripladder]# svn commit config -m "From production server - kc"&lt;br&gt;&lt;br /&gt;Sending&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; config/database.yml&lt;br&gt;&lt;br /&gt;Sending&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; config/environment.rb&lt;br&gt;&lt;br /&gt;Sending&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; config/environments/ferret_environment.rb&lt;br&gt;&lt;br /&gt;Sending&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; config/ferret_server.yml&lt;br&gt;&lt;br /&gt;Transmitting file data ....&lt;br&gt;&lt;br /&gt;Committed revision 997.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;u&gt;5.3.2 Configuring ferret init scripts&lt;/u&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;b&gt;# kc - Create this file and paste the contents (make changes as per your setup)&lt;/b&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 tripladder]# vi script/ferret_init_production&lt;br&gt;&lt;br /&gt;# kc - end of content for the file - &lt;b&gt;Do not copy this line&lt;/b&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;#!/bin/bash&lt;br&gt;&lt;br /&gt;#&lt;br&gt;&lt;br /&gt;# This script starts and stops the ferret DRb server&lt;br&gt;&lt;br /&gt;# chkconfig: 2345 89 36&lt;br&gt;&lt;br /&gt;# description: Ferret search engine for ruby apps.&lt;br&gt;&lt;br /&gt;#&lt;br&gt;&lt;br /&gt;# save the current directory&lt;br&gt;&lt;br /&gt;CURDIR=`pwd`&lt;br&gt;&lt;br /&gt;PATH=/usr/local/bin:/opt/ruby-enterprise-1.8.6-20080810/bin:$PATH&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;RORPATH="/var/www/html/tripladder"&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;case "$1" in&lt;br&gt;&lt;br /&gt;&amp;nbsp; start)&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cd $RORPATH&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; echo "Starting ferret DRb server."&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FERRET_USE_LOCAL_INDEX=1 \&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; script/ferret_server -e production start&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; chmod a+rwx /var/www/html/tripladder/log/ferret.pid # we need this for to allow some manipulations&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;;&lt;br&gt;&lt;br /&gt;&amp;nbsp; stop)&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cd $RORPATH&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; echo "Stopping ferret DRb server."&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FERRET_USE_LOCAL_INDEX=1 \&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; script/ferret_server -e production stop&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;;&lt;br&gt;&lt;br /&gt;&amp;nbsp; *)&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; echo $"Usage: $0 {start, stop}"&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exit 1&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;;&lt;br&gt;&lt;br /&gt;esac&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;cd $CURDIR&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;# kc - end of content for the file- &lt;b&gt;Do not copy this line&lt;/b&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 tripladder]# chmod a+x script/ferret_init_production&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 tripladder]# svn add script/ferret_init_production&lt;br&gt;&lt;br /&gt;A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; script/ferret_init_production&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 tripladder]# svn commit script -m "From production server - kc"&lt;br&gt;&lt;br /&gt;Adding&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; script/ferret_init_production&lt;br&gt;&lt;br /&gt;Transmitting file data .&lt;br&gt;&lt;br /&gt;Committed revision 998.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 tripladder]# ln -s /var/www/html/tripladder/script/ferret_init_production /etc/init.d/&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 tripladder]# chmod -R a+rwx log/&lt;br&gt;&lt;br /&gt;[root@domU-12-31-39-00-68-93 tripladder]# chmod -R a+rwx tmp/&lt;br&gt;&lt;br&gt;# -Start - section is optional - you will need to check if your dir structure already has 'index' directory required by ferret (ferret_environment.rb) .&lt;br&gt;[root@domU-12-31-39-00-68-93 tripladder]# mkdir index&lt;br&gt;[root@domU-12-31-39-00-68-93 tripladder]# chmod -R a+rwx index/&lt;br&gt;&lt;br /&gt;# - End - section is optional - you will need to check if your dir structure already has 'index' directory.&lt;br&gt;&lt;br&gt;[root@domU-12-31-39-00-68-93 software]# service ferret_init_production start&lt;br&gt;Starting ferret DRb server.&lt;br&gt;Install the ruby-openid gem to enable OpenID support&lt;br&gt;starting ferret server...&lt;br&gt;[root@domU-12-31-39-00-68-93 software]# service ferret_init_production stop&lt;br&gt;Stopping ferret DRb server.&lt;br&gt;Install the ruby-openid gem to enable OpenID support&lt;br&gt;stopping ferret server...&lt;br&gt;process 1723 has stopped&lt;br&gt;&lt;br&gt;&lt;br /&gt;# kc - If you have problems here you will need to check for &amp;lt;ROR-Home&amp;gt;/log/ferret.log(or ferret.out) files for errors and fix them accordingly. &lt;br&gt;# - Usually we will have problems with ownership or permission for ferret log files - 'log' directory and 'index' directory in ROR-Home.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;u&gt;&lt;font size="3"&gt;6. Configuring Apache and getting it to serve the application&lt;/font&gt;&lt;/u&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;u&gt;6.1 Getting Apache introduced to REE and Passenger&lt;/u&gt;&lt;br&gt;&lt;br&gt;[root@domU-12-31-39-00-68-93 tripladder]# vi /etc/httpd/conf/httpd.conf&lt;br&gt;# kc start For Phusion and enterprise Ruby - 09Nov08&lt;br&gt;LoadModule passenger_module /opt/ruby-enterprise-1.8.6-20080810/lib/ruby/gems/1.8/gems/passenger-2.0.3/ext/apache2/mod_passenger.so&lt;br&gt;&lt;br&gt;PassengerRoot /opt/ruby-enterprise-1.8.6-20080810/lib/ruby/gems/1.8/gems/passenger-2.0.3&lt;br&gt;&lt;br&gt;PassengerRuby /opt/ruby-enterprise-1.8.6-20080810/bin/ruby&lt;br&gt;# kc end For Phusion and enterprise Ruby - 09Nov08&lt;br&gt;&lt;br&gt;&lt;u&gt;6.2 Getting Apache to recognise our application as well as some REE/Passenger config parameters&lt;/u&gt;&lt;br&gt;&lt;br&gt;# kc start - Deploying tripladder app&lt;br&gt;RailsEnv production&lt;br&gt;PassengerMaxPoolSize 26&lt;br&gt;PassengerLogLevel 0&lt;br&gt;PassengerMaxInstancesPerApp 0&lt;br&gt;PassengerPoolIdleTime 86400&lt;br&gt;RailsSpawnMethod smart&lt;br&gt;&amp;lt;VirtualHost *:80&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ServerName www.tripladder.com&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DocumentRoot /var/www/html/tripladder/public&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # kc - to redirect tripladder.com to www.tripladder.com&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; RewriteEngine on&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; RewriteCond %{HTTP_HOST} ^tripladder\.com&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; RewriteRule ^(.*)$ http://www.tripladder.com/$1 [R=permanent,L]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # kc - to redirect tripladder.com to www.tripladder.com&lt;br&gt;&amp;lt;/VirtualHost&amp;gt;&lt;br&gt;# kc end - Deploying tripladder app&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;u&gt;6.3 Deploying the app and checking that its working&lt;/u&gt;&lt;br&gt;&lt;br&gt;[root@domU-12-31-39-00-68-93 tripladder]# service mysqld start&lt;br&gt;Starting MySQL:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&amp;nbsp; OK&amp;nbsp; ]&lt;br&gt;[root@domU-12-31-39-00-68-93 tripladder]# service httpd restart&lt;br&gt;Stopping httpd:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [FAILED]&lt;br&gt;Starting httpd:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&amp;nbsp; OK&amp;nbsp; ]&lt;br&gt;[root@domU-12-31-39-00-68-93 software]# service ferret_init_production start&lt;br&gt;Starting ferret DRb server.&lt;br&gt;Install the ruby-openid gem to enable OpenID support&lt;br&gt;starting ferret server...&lt;br&gt;&lt;br&gt;# - Check that the application is accessible from the URL or the IP address.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;u&gt;&lt;font size="3"&gt;7. Setting up periodic backups, cleaning up and miscellaneous activities&lt;/font&gt;&lt;/u&gt;&lt;br&gt;&lt;br&gt;&lt;u&gt;7.1 Ensure that you have full version of AWS tools&lt;/u&gt; (Section 2.4.2)&lt;br&gt;&lt;br&gt;&lt;u&gt;7.2 Set a cron task to take periodic backups of mysql&lt;/u&gt;&lt;br&gt;&lt;br&gt;# - Create a directory on EBS for your mysql dumps.&lt;br&gt;[root@domU-12-31-39-00-68-93 ~]# mkdir -p /mnt/data-store/mysql_backups/&lt;br&gt;[root@domU-12-31-39-00-68-93 ~]# chmod -R a+rw /mnt/data-store/mysql_backups/&lt;br&gt;&lt;br&gt;# Check that mysqldump works manually before you put it in cron.&lt;br&gt;&lt;br&gt;[root@domU-12-31-39-00-68-93 ~]# crontab -e&lt;br&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mysqldump --user=root --password=&amp;lt;root passwd&amp;gt; --single-transaction &amp;lt;database name&amp;gt; &amp;gt; /mnt/data-store/mysql_backups/database_name.sql&lt;br&gt;&lt;br&gt;&lt;u&gt;7.3 Use logrotate to clean up older mysqld dumps as well as RoR log files.&lt;/u&gt;&lt;br&gt;&lt;br&gt;# kc - Note - I have elected to have full backups everyday and rotate them every 30 days. i.e. I can go back-data upto 30 days if I want to restore mysql.&lt;br&gt;&lt;br&gt;[root@domU-12-31-39-00-68-93 ~]# vi /etc/logrotate.conf&lt;br&gt;# kc - 09Nov08 - for rotating rails logs&lt;br&gt;/var/www/html/tripladder/log/*.log {&lt;br&gt;&amp;nbsp; size=10M&lt;br&gt;&amp;nbsp; missingok&lt;br&gt;&amp;nbsp; rotate 4&lt;br&gt;&amp;nbsp; compress&lt;br&gt;&amp;nbsp; delaycompress&lt;br&gt;&amp;nbsp; notifempty&lt;br&gt;&amp;nbsp; copytruncate&lt;br&gt;}&lt;br&gt;# kc - 09Nov08 - for rotating rails logs&lt;br&gt;&lt;br&gt;# kc - 09Nov08 - for rotating mysqldumps&lt;br&gt;/mnt/data-store/mysql_backups/tripladder_prod.sql {&lt;br&gt;&amp;nbsp; daily&lt;br&gt;&amp;nbsp; rotate 30&lt;br&gt;&amp;nbsp; compress&lt;br&gt;&amp;nbsp; delaycompress&lt;br&gt;&amp;nbsp; notifempty&lt;br&gt;&amp;nbsp; notifempty&lt;br&gt;&amp;nbsp; copytruncate&lt;br&gt;}&lt;br&gt;# kc - 09Nov08 - for rotating mysql dumps&lt;br&gt;&lt;br&gt;&lt;u&gt;7.4 Use EBS snapshot facility to automate backups.&lt;/u&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;[root@domU-12-31-39-02-68-78 ~]# vi software/backup_script.sh&lt;br&gt;#!/bin/bash&lt;br&gt;&lt;br&gt;export EC2_PRIVATE_KEY=$(echo /root/.ec2/pk-xxxxxxxxxx.pem)&lt;br&gt;export EC2_CERT=$(echo /root/.ec2/cert-xxxxxxxxxxx.pem)&lt;br&gt;export EC2_HOME=/root/software/ec2-api-tools-1.3-26369&lt;br&gt;export PATH=$PATH:$EC2_HOME/bin&lt;br&gt;export JAVA_HOME=/root/software/jdk1.6.0_10/jre&lt;br&gt;/root/software/ec2-api-tools-1.3-26369/bin/ec2-create-snapshot vol-&amp;lt;myvolume&amp;gt;&lt;br&gt;&lt;br&gt;# - test that this is working!!!&lt;br&gt;[root@domU-12-31-39-00-68-93 ~]# chmod a+x software/backup_script.sh&lt;br&gt;[root@domU-12-31-39-00-68-93 ~]# ./software/backup_script.sh&lt;br&gt;SNAPSHOT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; snap-d55cbdbc&amp;nbsp;&amp;nbsp; vol-8105e0e8&amp;nbsp;&amp;nbsp;&amp;nbsp; pending 2008-11-11T10:56:10+0000&lt;br&gt;&lt;br&gt;# - kc - now we put this in the crontab.&lt;br&gt;[root@domU-12-31-39-00-68-93 ~]# crontab -e&lt;br&gt;3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /root/software/backup_script.sh&lt;br&gt;crontab: installing new crontab&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b style="color: rgb(255, 255, 255); background-color: rgb(255, 0, 0);"&gt;# kc - start - Important - &lt;/b&gt;&lt;br&gt;#&amp;nbsp;&amp;nbsp; &amp;nbsp;We save all user uploaded data to 2 location - 1st to a directory in the RoR dir structure and 2nd to a directory on the EBS.&lt;br&gt;#&amp;nbsp;&amp;nbsp; &amp;nbsp;The rails app access this data from EC2 local storage.&lt;br&gt;#&amp;nbsp;&amp;nbsp; &amp;nbsp;If ever the instance dies, we copy the data from EBS to associated directory on directory structure. Now why don't we link the RoR pubic directory to EBS is because EBS has some &lt;br&gt;#&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;price attached to disk access. I could not calculate this with any conviction and hence decided not to use the disk for reads. The EBS is only used for writes for user data.&lt;br&gt;#&amp;nbsp;&amp;nbsp; &amp;nbsp;Having user data like this reduces your disk access costs. Please look at this tutorial to see how we achieved this in rails - &lt;span style="background-color: rgb(255, 0, 0);"&gt;http://docs.google.com/Doc?id=dckr2rnx_5ghz54qcj&lt;/span&gt;&lt;br&gt;#&amp;nbsp;&amp;nbsp; &amp;nbsp;Since Mysql can't have 2 data dirs, we host the mysql data directory on EBS.&lt;br&gt;&lt;b style="color: rgb(255, 255, 255); background-color: rgb(255, 0, 0);"&gt;# kc - end - Important - &lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;u&gt;7.5 Some apache optimisations&lt;/u&gt;&lt;br&gt;&lt;br&gt;[root@domU-12-31-39-00-68-93 tripladder]# vi public/.htaccess&lt;br&gt;# kc start - enable browser caching - 24Sep08&lt;br&gt;&amp;lt;IfModule mod_expires.c&amp;gt;&lt;br&gt;&amp;nbsp; ExpiresActive On&lt;br&gt;&amp;nbsp; ExpiresDefault "access plus 1 seconds"&lt;br&gt;&amp;nbsp; ExpiresByType text/html "access plus 1 seconds"&lt;br&gt;&amp;nbsp; ExpiresByType image/gif "access plus 120 minutes"&lt;br&gt;&amp;nbsp; ExpiresByType image/jpeg "access plus 120 minutes"&lt;br&gt;&amp;nbsp; ExpiresByType image/png "access plus 120 minutes"&lt;br&gt;&amp;nbsp; ExpiresByType text/css "access plus 60 minutes"&lt;br&gt;&amp;nbsp; ExpiresByType text/javascript "access plus 60 minutes"&lt;br&gt;&amp;nbsp; ExpiresByType application/x-javascript "access plus 60 minutes"&lt;br&gt;&amp;nbsp; ExpiresByType text/xml "access plus 60 minutes"&lt;br&gt;&amp;lt;/IfModule&amp;gt;&lt;br&gt;&lt;br&gt;[root@domU-12-31-39-00-68-93 tripladder]# svn commit public/.htaccess -m "From production server"&lt;br&gt;Sending&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public/.htaccess&lt;br&gt;Transmitting file data .&lt;br&gt;Committed revision 1000.&lt;br&gt;&lt;br&gt;# - Get Apache to read this by restarting the application:&lt;br&gt;[root@domU-12-31-39-00-68-93 tripladder]# touch tmp/restart.txt&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; --&amp;nbsp; OR --&lt;br&gt;[root@domU-12-31-39-00-68-93 tripladder]# service httpd restart&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;u&gt;7.6 We need to be able to use rake to clear caches else this will become a major headache when we update to new versions.&lt;/u&gt;&lt;br&gt;&lt;br&gt;[root@domU-12-31-39-00-68-93 tripladder]# service httpd stop&lt;br&gt;Stopping httpd:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&amp;nbsp; OK&amp;nbsp; ]&lt;br&gt;[root@domU-12-31-39-00-68-93 tripladder]# rm -f public/cache/*cache&lt;br&gt;[root@domU-12-31-39-00-68-93 tripladder]# ls public/cache/&lt;br&gt;[root@domU-12-31-39-00-68-93 tripladder]#&lt;br&gt;[root@domU-12-31-39-00-68-93 tripladder]# cd public/cache/&lt;br&gt;[root@domU-12-31-39-00-68-93 cache]# cd ..&lt;br&gt;[root@domU-12-31-39-00-68-93 public]# svn del cache&lt;br&gt;D&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cache&lt;br&gt;[root@domU-12-31-39-00-68-93 public]# svn commit -m "For symlinking tmp/cache to public/cache"&lt;br&gt;Deleting&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public/cache&lt;br&gt;&lt;br&gt;Committed revision 1041.&lt;br&gt;[root@domU-12-31-39-00-68-93 public]# ln -s /var/www/html/tripladder/tmp/cache/ /var/www/html/tripladder/public/&lt;br&gt;[root@domU-12-31-39-00-68-93 public]# chmod a+rwx /var/www/html/tripladder/tmp/cache&lt;br&gt;&lt;br&gt;[root@domU-12-31-39-00-68-93 public]# service httpd start&lt;br&gt;Starting httpd:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&amp;nbsp; OK&amp;nbsp; ]&lt;br&gt;# - KC now to test the rake task to clear cache&lt;br&gt;[root@domU-12-31-39-00-68-93 tripladder]# ls public/cache/&lt;br&gt;application_layout_header.cache&amp;nbsp; homepage_meta.cache&lt;br&gt;homepage.cache&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; send_review_to_freind.cache&lt;br&gt;homepage_header.cache&lt;br&gt;[root@domU-12-31-39-00-68-93 tripladder]# ls tmp/cache/&lt;br&gt;application_layout_header.cache&amp;nbsp; homepage_meta.cache&lt;br&gt;homepage.cache&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; send_review_to_freind.cache&lt;br&gt;homepage_header.cache&lt;br&gt;[root@domU-12-31-39-00-68-93 tripladder]# rake tmp:clear&lt;br&gt;(in /var/www/html/tripladder)&lt;br&gt;[root@domU-12-31-39-00-68-93 tripladder]# ls tmp/cache/&lt;br&gt;[root@domU-12-31-39-00-68-93 tripladder]# ls public/cache/&lt;br&gt;&lt;br&gt;# kc - Confirmed that rake works.&lt;br&gt;&lt;br&gt;&lt;u&gt;&lt;font size="3"&gt;8. Bundling the image&lt;/font&gt;&lt;/u&gt;&lt;br&gt;&lt;br&gt;&lt;u&gt;8.1 First stop all running services&lt;/u&gt;&lt;br&gt;&lt;br&gt;Now stop all services:&lt;br&gt;[root@domU-12-31-39-00-68-93 tripladder]# service httpd stop&lt;br&gt;Stopping httpd:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&amp;nbsp; OK&amp;nbsp; ]&lt;br&gt;[root@domU-12-31-39-00-68-93 software]# service ferret_init_production stop&lt;br&gt;Stopping ferret DRb server.&lt;br&gt;Install the ruby-openid gem to enable OpenID support&lt;br&gt;stopping ferret server...&lt;br&gt;process 1741 has stopped&lt;br&gt;[root@domU-12-31-39-00-68-93 software]# service mysqld stop&lt;br&gt;Stopping MySQL:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&amp;nbsp; OK&amp;nbsp; ]&lt;br&gt;&lt;br&gt;&lt;u&gt;8.2 Ensure that services do not start when system reboots - &lt;font style="background-color: rgb(204, 0, 0); color: rgb(255, 255, 255);" size="3"&gt;This is important as we have to attach EBS before we start the services.&lt;/font&gt;&lt;/u&gt;&lt;br&gt;&lt;br&gt;[root@domU-12-31-39-00-68-93 software]# chkconfig --list httpd&lt;br&gt;httpd&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0:off&amp;nbsp;&amp;nbsp; 1:off&amp;nbsp;&amp;nbsp; 2:off&amp;nbsp;&amp;nbsp; 3:off&amp;nbsp;&amp;nbsp; 4:off&amp;nbsp;&amp;nbsp; 5:off&amp;nbsp;&amp;nbsp; 6:off&lt;br&gt;[root@domU-12-31-39-00-68-93 software]# chkconfig --list mysqld&lt;br&gt;mysqld&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0:off&amp;nbsp;&amp;nbsp; 1:off&amp;nbsp;&amp;nbsp; 2:off&amp;nbsp;&amp;nbsp; 3:off&amp;nbsp;&amp;nbsp; 4:off&amp;nbsp;&amp;nbsp; 5:off&amp;nbsp;&amp;nbsp; 6:off&lt;br&gt;[root@domU-12-31-39-00-68-93 software]# chkconfig --list ferret_init_production&lt;br&gt;service ferret_init_production supports chkconfig, but is not referenced in any runlevel (run 'chkconfig --add ferret_init_production')&lt;br&gt;[root@domU-12-31-39-00-68-93 software]# chkconfig --add ferret_init_production&lt;br&gt;[root@domU-12-31-39-00-68-93 software]# chkconfig --list ferret_init_production&lt;br&gt;ferret_init_production&amp;nbsp; 0:off&amp;nbsp;&amp;nbsp; 1:off&amp;nbsp;&amp;nbsp; 2:on&amp;nbsp;&amp;nbsp;&amp;nbsp; 3:on&amp;nbsp;&amp;nbsp;&amp;nbsp; 4:on&amp;nbsp;&amp;nbsp;&amp;nbsp; 5:on&amp;nbsp;&amp;nbsp;&amp;nbsp; 6:off&lt;br&gt;[root@domU-12-31-39-00-68-93 software]# chkconfig&amp;nbsp; ferret_init_production off&lt;br&gt;[root@domU-12-31-39-00-68-93 software]# chkconfig --list ferret_init_production&lt;br&gt;ferret_init_production&amp;nbsp; 0:off&amp;nbsp;&amp;nbsp; 1:off&amp;nbsp;&amp;nbsp; 2:off&amp;nbsp;&amp;nbsp; 3:off&amp;nbsp;&amp;nbsp; 4:off&amp;nbsp;&amp;nbsp; 5:off&amp;nbsp;&amp;nbsp; 6:off&lt;br&gt;&lt;br&gt;&lt;u&gt;8.3 Bundle the volume and save it to S3.&lt;/u&gt;&lt;br&gt;&lt;br&gt;[root@domU-12-31-39-00-68-93 ~]#&amp;nbsp; ec2-bundle-vol -d /mnt/ -k .ec2/pk-&amp;lt;xxxxxxxxx&amp;gt;.pem -c .ec2/cert-&amp;lt;xxxxxxxx&amp;gt;.pem -u &amp;lt;12 digit AWS user id without hypehns&amp;gt;&lt;br&gt;Please specify a value for arch [i386]:&lt;br&gt;....# Lots of activity&lt;br&gt;&lt;br&gt;[root@domU-12-31-39-00-68-93 ~]# ec2-upload-bundle -b tripladder-09Nov08 -m /mnt/image.manifest.xml -a &amp;lt;accesskey&amp;gt; -s &amp;lt;secret&amp;gt;&lt;br&gt;&lt;br&gt;guest@kc-laptop:~$ ec2-register tripladder-09Nov08/image.manifest.xml&lt;br&gt;IMAGE&amp;nbsp;&amp;nbsp; ami-3c15f155&lt;br&gt;&lt;br&gt;&lt;u&gt;8.4 Cleaning up &lt;/u&gt;&lt;br&gt;&lt;br&gt;# kc - The AWS bundle tools seem to have memory leak - The used memory never comes back to normal and seems to be using up ~ 1 GB of RAM&lt;br&gt;[root@domU-12-31-39-00-68-93 ~]# umount /mnt/data-store/&lt;br&gt;[root@domU-12-31-39-00-68-93 ~]# reboot&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;u&gt;&lt;font size="3"&gt;9. Bringing up the application after reboot.&lt;/font&gt;&lt;/u&gt;&lt;br&gt;&lt;br&gt;[root@domU-12-31-39-00-68-93 ~]# mount /dev/sdh /mnt/data-store/&lt;br&gt;[root@domU-12-31-39-00-68-93 ~]# service mysqld start&lt;br&gt;Starting MySQL:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&amp;nbsp; OK&amp;nbsp; ]&lt;br&gt;[root@domU-12-31-39-00-68-93 ~]# service ferret_init_production start&lt;br&gt;Starting ferret DRb server.&lt;br&gt;Install the ruby-openid gem to enable OpenID support&lt;br&gt;starting ferret server...&lt;br&gt;[root@domU-12-31-39-00-68-93 ~]# service httpd start&lt;br&gt;Starting httpd:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&amp;nbsp; OK&amp;nbsp; ]&lt;br&gt;&lt;br&gt;# kc - Site should be running perfectly.&lt;br&gt;&lt;br&gt;&lt;u&gt;&lt;font size="3"&gt;10. &lt;/font&gt;&lt;font size="3"&gt;Bringing up the application from AMI&lt;/font&gt;&lt;/u&gt;&lt;br&gt;If ever your instance is killed, just do the following:&lt;br&gt;1. Launch your bundled instance wih the AMI id you got when you registered your bundle, &lt;br&gt;2. Attach the EBS volume, &lt;br&gt;3. Associate the IP address &lt;br&gt;4. Start services - mysql, ferret and httpd.&lt;br&gt;5. Presto!!!&lt;br&gt;&lt;br&gt;&lt;span style="background-color: rgb(255, 0, 0); color: rgb(255, 255, 255);"&gt;# - Important - NEVER put the mount option for EBS in fstab. When the system is brought up from AMI, the EBS volume is still not attached and hence will not be mounted. This will not allow the system to boot. You AMI will essentially be useless. &lt;/span&gt;&lt;br style="background-color: rgb(255, 0, 0);"&gt;&lt;span style="color: rgb(255, 255, 255); background-color: rgb(255, 0, 0);"&gt;WRONG, WRONG, WRONG, WRONG, WRONG, WRONG, WRONG, WRONG, WRONG, WRONG !!!!!!!!!!!!!!!!&lt;/span&gt;&lt;br style="color: rgb(255, 0, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;[root@domU-12-31-39-00-65-E3 ~]# vi /etc/fstab&lt;/span&gt;&lt;br style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;/dev/sdh&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /mnt/data-store&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ext3&amp;nbsp;&amp;nbsp;&amp;nbsp; defaults,noatime 0 2&lt;/span&gt;&lt;br&gt;# - Amazon is working on attaching a volume to EC2 instance during launch - when this feature is available, we can use fstab....&lt;br style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(255, 255, 255); background-color: rgb(255, 0, 0);"&gt;WRONG, WRONG, WRONG, WRONG, WRONG, WRONG, WRONG, WRONG, WRONG, WRONG !!!!!!!!!!!!!!!&lt;/span&gt;&lt;br style="color: rgb(255, 0, 0);"&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4494660564939106638-8944477527835173285?l=rknowsys-ror.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rknowsys-ror.blogspot.com/feeds/8944477527835173285/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4494660564939106638&amp;postID=8944477527835173285' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4494660564939106638/posts/default/8944477527835173285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4494660564939106638/posts/default/8944477527835173285'/><link rel='alternate' type='text/html' href='http://rknowsys-ror.blogspot.com/2011/07/hosting-ruby-on-rails-on-amazon-aws.html' title='Hosting Ruby on Rails on Amazon AWS with Ruby Enterprise Edition'/><author><name>kc</name><uri>http://www.blogger.com/profile/14967738987222471098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4494660564939106638.post-690163909308014419</id><published>2010-03-03T02:32:00.000-08:00</published><updated>2010-03-03T02:53:32.721-08:00</updated><title type='text'>truncate method incompatible with Ruby 1.8.7</title><content type='html'>With rails &gt; 2.2 and ruby 1.8.7 we can find this error using rails truncate helper&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;code&gt;undefined method `length' for  Enumerable::Enumerator:0x7f44da230548&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;br /&gt;&lt;code&gt;&lt;enumerable::enumerator:0x7f44da230548&gt;&lt;br /&gt;To solve this problem paste the below code in environment.rb (EOF)&lt;br /&gt;&lt;/enumerable::enumerator:0x7f44da230548&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;module ActionView&lt;br /&gt;module Helpers&lt;br /&gt;module TextHelper&lt;br /&gt; def truncate(text, length = 30, truncate_string = "...")&lt;br /&gt;   if text.nil? then return end&lt;br /&gt;   l = length - truncate_string.chars.to_a.size&lt;br /&gt;   (text.chars.to_a.size &gt; length ? text.chars.to_a[0...l].join + truncate_string : text).to_s&lt;br /&gt; end&lt;br /&gt;end&lt;br /&gt;end&lt;br /&gt;end&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4494660564939106638-690163909308014419?l=rknowsys-ror.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rknowsys-ror.blogspot.com/feeds/690163909308014419/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4494660564939106638&amp;postID=690163909308014419' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4494660564939106638/posts/default/690163909308014419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4494660564939106638/posts/default/690163909308014419'/><link rel='alternate' type='text/html' href='http://rknowsys-ror.blogspot.com/2010/03/truncate-method-incompatible-with-ruby.html' title='truncate method incompatible with Ruby 1.8.7'/><author><name>Lakshmi</name><uri>http://www.blogger.com/profile/11126108879901485200</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4494660564939106638.post-715484463337770848</id><published>2009-12-08T02:02:00.000-08:00</published><updated>2009-12-08T03:56:54.770-08:00</updated><title type='text'>Templates with HAML</title><content type='html'>&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;span style="font-weight: bold;"&gt;HAML&lt;/span&gt;(XHTML Abstraction Markup Language) is an alternative to RHTML for writing templates for views in a Rails application. Its advantages over RHTML include brevity and clarity.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt; Features:&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;&lt;b:include data="blog" name="all-head-content"&gt;&lt;/b:include&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;span&gt;Whitespace active&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;span&gt;Well-formatted markup&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;span&gt;DRY&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;span&gt;Follows CSS conventions&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;span&gt;Integrates Ruby code&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;span&gt;Implements Rails templates with the .haml extension&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;span&gt;it is elegant&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;span&gt;how to install:&lt;br /&gt;We can use gem or plugin&lt;br /&gt;&lt;br /&gt;1)install gem :&lt;br /&gt;        sudo gem install haml&lt;br /&gt;2)install  plugin:   &lt;br /&gt;    ruby script/plugin install git clone git://github.com/nex3/haml.git&lt;br /&gt;&lt;br /&gt;Usage:&lt;br /&gt;save  files  with extension .haml&lt;br /&gt;&lt;br /&gt;Let's look at the HAML: index.html.haml&lt;br /&gt;&lt;br /&gt;      %h1 Hello to you all&lt;br /&gt; %p This is a test page&lt;br /&gt;&lt;br /&gt;A '%' symbol creates an HTML tag. 2 spaces are used to indent the code into sub-elements and we need not to specify end tags.so that reducing so many lines code.&lt;br /&gt;&lt;br /&gt;I tried to post examples with brief introduction, but the blog site seems to be not supporting html tags.&lt;br /&gt;There is a lot more to learn check these References:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;http://haml-lang.com/docs/yardoc/file.HAML_REFERENCE.html#plugin&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;http://haml-lang.com/about.html&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;http://wiki.rubyonrails.org/howtos/templates/haml&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4494660564939106638-715484463337770848?l=rknowsys-ror.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rknowsys-ror.blogspot.com/feeds/715484463337770848/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4494660564939106638&amp;postID=715484463337770848' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4494660564939106638/posts/default/715484463337770848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4494660564939106638/posts/default/715484463337770848'/><link rel='alternate' type='text/html' href='http://rknowsys-ror.blogspot.com/2009/12/haml-xhtml-abstraction-markup-language.html' title='Templates with HAML'/><author><name>Lakshmi</name><uri>http://www.blogger.com/profile/11126108879901485200</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4494660564939106638.post-1805193053061697366</id><published>2009-01-29T21:21:00.000-08:00</published><updated>2009-01-29T21:30:24.924-08:00</updated><title type='text'>Migrating Stored Procedures in RoR</title><content type='html'>&lt;p&gt;This similar article may be found on the internet,  but i guess this article will be helpful for newbie's.&lt;/p&gt; &lt;p&gt;Migrations are a convenient way to alter your database in a structured and organised manner.&lt;/p&gt; &lt;p&gt;Here we are going to see how to create stored procedures with &lt;b&gt;rake db:migrate&lt;/b&gt;&lt;/p&gt; &lt;p&gt;First create a new migration file in your db/migrate folder using&lt;/p&gt; &lt;p&gt;&lt;code&gt;&lt;b&gt;ruby script/generate migration stored_procedures. &lt;/b&gt;This will create the file db/migrate/001_stored_procedures.&lt;/code&gt;&lt;/p&gt; &lt;h3&gt;Edit the code to tell it what to do.&lt;/h3&gt; &lt;p&gt;The method &lt;code&gt;self.up&lt;/code&gt; is used when migrating to a new version, &lt;code&gt;self.down&lt;/code&gt; is used to roll back any changes if needed.  The class name needs to be the same as the migration name (i.e. &lt;code&gt;db/migrate/&lt;/code&gt;&lt;code&gt;001_stored_procedures&lt;/code&gt; needs a class name of @&lt;code&gt;StoredProcedures&lt;/code&gt;@).&lt;/p&gt; &lt;p&gt;Let us migrate a stored procedure called items with a basic sql code :&lt;/p&gt; &lt;p&gt;The migration file now looks like this :&lt;/p&gt; &lt;pre&gt;&lt;code&gt;class StoredProcedures &lt; ActiveRecord::Migration&lt;br /&gt; def self.up&lt;br /&gt;   execute &lt;&lt;-__EOI&lt;br /&gt;     CREATE DEFINER=`root`@`localhost` PROCEDURE `items`(IN l_item INT,IN userid INT,OUT l_itemid INT,OUT l_item_name VARCHAR)&lt;br /&gt;     BEGIN SELECT itemid,item_name,held_by,id INTO l_itemid,userid,id FROM users_items WHERE itemid=l_item AND held_by=userid;&lt;br /&gt;     END&lt;br /&gt;   __EOI&lt;br /&gt; end&lt;br /&gt; def self.down&lt;br /&gt;   execute "DROP PROCEDURE IF EXISTS `items`"&lt;br /&gt; end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;And now the cool part is just run rake db:migrate, Rails will create all the migration files in your database and also creates Stored procedures.&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;&lt;span class="hover_target"&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span class="hover_target"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span class="hover_target"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4494660564939106638-1805193053061697366?l=rknowsys-ror.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rknowsys-ror.blogspot.com/feeds/1805193053061697366/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4494660564939106638&amp;postID=1805193053061697366' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4494660564939106638/posts/default/1805193053061697366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4494660564939106638/posts/default/1805193053061697366'/><link rel='alternate' type='text/html' href='http://rknowsys-ror.blogspot.com/2009/01/migrating-stored-procedures-in-ror.html' title='Migrating Stored Procedures in RoR'/><author><name>srinath48</name><uri>http://www.blogger.com/profile/17945505160937254841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4494660564939106638.post-6646592266851394934</id><published>2008-11-24T00:13:00.000-08:00</published><updated>2008-11-27T05:21:41.108-08:00</updated><title type='text'>Optimising RoR application for Amazon EBS</title><content type='html'>Amazon has a great feature called EBS which enables to have data persistence in the event of an instance failure.&lt;br /&gt;We have configured mysql to use the EBS for datafiles. Details for this can be found here: &lt;a href="http://docs.google.com/Doc?id=dcn2ckbh_21gznbbjhr"&gt;http://docs.google.com/Doc?id=dcn2ckbh_21gznbbjhr&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Though a great feature, EBS has a couple of operational limitations.&lt;br /&gt;1. It has a cryptic billing structure which bills based on (capacity + usage). Now most of us can't really predict the usage of disk and risk overshooting this.&lt;br /&gt;2. EBS will be slower that locally mounted storage.&lt;br /&gt;&lt;br /&gt;To overcome these issues, in our RoR application, we decided make some changes.&lt;br /&gt;&lt;br /&gt;We decided to upload all user data to TWO locations - 1st location is the usual "RoR-app-home/public/&lt;sub-directory&gt;" directory. This directory is in the local storage of the instance.&lt;br /&gt;The 2nd location is the EBS (/dev/sdh) mounted on /mnt/data-store of the instance. Within data-store, we created a few directories for storing various types of user data.&lt;br /&gt;1. During upload, the data is copied to both locations. i.e. We write to both local and EBS.&lt;br /&gt;2. During read - we read it from local directory of EC2. This local reads ensures that EBS is not hit with multiple read requests and our EBS costs are low. There is alo the speed benefit of reading from local storage as opposed to reading from EBS (Amazon AWs developers can correct me on the speed issue.)&lt;br /&gt;&lt;br /&gt;Here is the sampe code where we are uploading a video and a thumbnail associated with the video: &lt;span style="background-color: rgb(255, 255, 0);"&gt;Keep and eye out for "video.rewind".&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Add in app/model/video.rb &lt;span style="background-color: rgb(255, 255, 0);"&gt;(for our application - you will have adapt for you app.)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;VIDEO_UPLOAD_PATH = "public/video_player/videos/"&lt;br /&gt;THUMBNAIL_UPLOAD_PATH = "public/video_player/thumbnail/"&lt;br /&gt;&lt;br /&gt;#Manage the path depending on OS&lt;br /&gt;#Hard disk usage Optimisation for AWS.&lt;br /&gt;#Replicate videos, images, into AWS local hard disk.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;VIDEO_UPLOAD_PATH_FOR_AWS = "/mnt/data-store/app-data/videos/"&lt;/b&gt;&lt;br /&gt;&lt;b&gt;THUMBNAIL_UPLOAD_PATH_FOR_AWS = "/mnt/data-store/app-data/thumbnails/"&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;# create and upload video , thumbail&lt;br /&gt;&lt;b&gt;def self.create_video&lt;/b&gt;&lt;br /&gt;if valid_video?(video) &amp;amp;&amp;amp; valid_thumbnail?(thumbnail)&lt;br /&gt;video_filename = sanitize_attachment_name(video)&lt;br /&gt;thumbnail_filename = sanitize_attachment_name(thumbnail)&lt;br /&gt;@video = self.new do |video|&lt;br /&gt;video.video_name = video_filename&lt;br /&gt;video.thumbnail_name = thumbnail_filename&lt;br /&gt;end&lt;br /&gt;self.upload_video(video, video_filename, @video.id) &amp;amp;&amp;amp; self.upload_thumbnail(thumbnail, thumbnail_filename, @video.id) if @video.save&lt;br /&gt;end&lt;br /&gt;&lt;b&gt;end&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;def self.upload_video(video, video_filename, video_id)&lt;/b&gt;&lt;br /&gt;video_path = VIDEO_UPLOAD_PATH + "#{ video_id}_" + video_filename&lt;br /&gt;File.open(video_path, "wb") { |f| f.write(video.read) }&lt;br /&gt;# code to manage video upload file to EBS&lt;br /&gt;video.rewind&lt;br /&gt;video_path_for_aws = VIDEO_UPLOAD_PATH_FOR_AWS + "#{ video_id}_" + video_filename&lt;br /&gt;File.open( video_path_for_aws, "wb") { |f| f.write(video.read) }&lt;br /&gt;&lt;b&gt;end&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;def self.upload_thumbnail(thumbnail, thumbnail_filename, video_id)&lt;/b&gt;&lt;br /&gt;thumbnail_path = THUMBNAIL_UPLOAD_PATH + "#{ video_id}_" + thumbnail_filename&lt;br /&gt;File.open(thumbnail_path, "wb") { |f| f.write(thumbnail.read) }&lt;br /&gt;# code to manage thumbnail image upload file to EBS&lt;br /&gt;thumbnail.rewind&lt;br /&gt;thumbnail_path_for_aws = THUMBNAIL_UPLOAD_PATH_FOR_AWS + "#{ video_id}_" + thumbnail_filename&lt;br /&gt;File.open(thumbnail_path_for_aws, "wb") { |f| f.write(thumbnail.read) }&lt;br /&gt;&lt;b&gt;end&lt;/b&gt;&lt;/sub-directory&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4494660564939106638-6646592266851394934?l=rknowsys-ror.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rknowsys-ror.blogspot.com/feeds/6646592266851394934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4494660564939106638&amp;postID=6646592266851394934' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4494660564939106638/posts/default/6646592266851394934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4494660564939106638/posts/default/6646592266851394934'/><link rel='alternate' type='text/html' href='http://rknowsys-ror.blogspot.com/2008/11/modifying-ror-app-to-save-upload-files.html' title='Optimising RoR application for Amazon EBS'/><author><name>srinath48</name><uri>http://www.blogger.com/profile/17945505160937254841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4494660564939106638.post-3923874861559502109</id><published>2008-11-21T05:34:00.001-08:00</published><updated>2008-11-21T05:36:23.740-08:00</updated><title type='text'>Tutorial on hosting RoR app on Amazon AWS with EC2, EBS, Ruby Enterprise Edition (REE) and Phusion Passenger (mod_rails)</title><content type='html'>Background:&lt;br /&gt;We built a tourism portal in RoR for one of our clients. You have a look at it - - www.tripladder.com&lt;br /&gt;After building it, we were requested to host and manage it for them. Initially we went with knownhost which is OK but a production RoR application needs more RAM than what we get on most VPS plans - especially if we have image processing. We did consider AWS but at that time it did not have EBS and the client did not initially expect enough traffic to justify a 'scalr' managed cluster. We were looking for a replacement to a dedicated server. Once EBS was launched, we immediately decided to move the site to AWS. The Cost-benefit analysis is compelling.&lt;br /&gt;&lt;br /&gt;The following tutorial starts off after signing up with AWS and configuring your desktop/laptop to be able to connect to AWS and launch instances i.e. we assume that you have completed the 'Getting Started' section of AWS.&lt;br /&gt;&lt;br /&gt;We have started with the stock Fedora image and modified it to our requirements. We could have used CentOS but Fedora-8 appeared at the top of the list and we went ahead with it.&lt;br /&gt;&lt;br /&gt;The application hosting has the following steps.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;  Launching an instance.  &lt;/li&gt;&lt;li&gt;  Installing RoR, gems, plugins...We used rmagick, hence we had to install Imagemagick too.  &lt;/li&gt;&lt;li&gt;  Installing REE and Phusion (mod_rails)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;  Installing mysql.  &lt;/li&gt;&lt;li&gt;  Intalling the application (checkout from subversion).  &lt;/li&gt;&lt;li&gt;  Creating and attaching a EBS volume. Mysql with data on EBS  &lt;/li&gt;&lt;li&gt;  Modifying the RoR app to save user upload files to EBS.(&lt;span style="color: rgb(204, 0, 0);"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:85%;"&gt;http://docs.google.com/Doc?id=dcn2ckbh_20hk4kc4d4&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;  Installing and configuring a production level ferret server  &lt;/li&gt;&lt;li&gt;  Configuring Apache to serve the application, caching optimisations for performance.  &lt;/li&gt;&lt;li&gt; Configuring permanent public IP (covered) and DNS (we have the domain parked with go daddy but this is not covered in this article) &lt;/li&gt;&lt;li&gt;  Configuring smtp (email) support for RoR application.  &lt;/li&gt;&lt;li&gt;  Once we have the perfect server setup, save it to S3.  &lt;/li&gt;&lt;li&gt;  Periodic automated backups - Using Amazon snapshots.&lt;span style="background-color: rgb(255, 0, 0);"&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;The full tutorial is available here:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;http://docs.google.com/Doc?id=dcn2ckbh_21gznbbjhr&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4494660564939106638-3923874861559502109?l=rknowsys-ror.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rknowsys-ror.blogspot.com/feeds/3923874861559502109/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4494660564939106638&amp;postID=3923874861559502109' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4494660564939106638/posts/default/3923874861559502109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4494660564939106638/posts/default/3923874861559502109'/><link rel='alternate' type='text/html' href='http://rknowsys-ror.blogspot.com/2008/11/background-we-built-tourism-portal-in.html' title='Tutorial on hosting RoR app on Amazon AWS with EC2, EBS, Ruby Enterprise Edition (REE) and Phusion Passenger (mod_rails)'/><author><name>kc</name><uri>http://www.blogger.com/profile/14967738987222471098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4494660564939106638.post-9105584235773197863</id><published>2008-11-21T05:13:00.000-08:00</published><updated>2008-11-21T05:18:46.305-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EBS'/><category scheme='http://www.blogger.com/atom/ns#' term='Amazon'/><category scheme='http://www.blogger.com/atom/ns#' term='EC2'/><category scheme='http://www.blogger.com/atom/ns#' term='AWS'/><title type='text'>Tutorial on hosting a RoR (Ruby on Rails) application on Amazon AWS with EC2 and EBS.</title><content type='html'>We built a tourism portal in RoR for one of our clients. You can have a look at it - - www.tripladder.com&lt;br /&gt;After building it, we were requested to host and manage it for them. Initially we went with knownhost which is OK but a production RoR application needs more RAM than what we get on most VPS plans - especially if we have image processing. We did consider AWS but at that time it did not have EBS and the client did not initially expect enough traffic to justify a 'scalr' managed cluster. We were looking for a replacement to a dedicated server. Once EBS was launched, we immediately decided to move the site to AWS. The Cost-benefit analysis is compelling.&lt;br /&gt;&lt;br /&gt;The following tutorial starts off after signing up with AWS and configuring your desktop/laptop to be able to connect to AWS and launch instances i.e. we assume that you have completed the 'Getting Started' section of AWS.&lt;br /&gt;&lt;br /&gt;We have started with the stock Fedora image and modified it to our requirements. We could have used CentOS but Fedora-8 appeared at the top of the list and we went ahead with it.&lt;br /&gt;&lt;br /&gt;The application hosting has the following steps.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Launching an instance.&lt;/li&gt;&lt;li&gt;Installing RoR, gems, plugins...We used rmagick, hence we had to install Imagemagick too.&lt;/li&gt;&lt;li&gt;Installing mysql.&lt;/li&gt;&lt;li&gt;Intalling the application (checkout from subversion).&lt;/li&gt;&lt;li&gt;Creating and attaching a EBS volume. Mysql with data on EBS&lt;/li&gt;&lt;li&gt;Modifying the RoR app to save user upload files to EBS.&lt;/li&gt;&lt;li&gt;Installing and configuring a production level ferret server&lt;/li&gt;&lt;li&gt;Installing and configuring mongrel cluster.&lt;/li&gt;&lt;li&gt;Configuring Apache to proxy to mongrel cluster, caching optimisations for performance.&lt;/li&gt;&lt;li&gt;Configuring permanent public IP (covered) and DNS (we have the domain parked with go daddy but this is not covered in this article)&lt;/li&gt;&lt;li&gt;Configuring smtp (email) support for RoR application.&lt;/li&gt;&lt;li&gt;Once we have the perfect server setup, save it to S3.&lt;/li&gt;&lt;li&gt;Periodic automated backups -This is available here: http://docs.google.com/Doc?id=dcn2ckbh_21gznbbjhr&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;For the full tutorial - go to this link.&lt;br /&gt;&lt;br /&gt;http://docs.google.com/Doc?id=dcn2ckbh_20hk4kc4d4&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4494660564939106638-9105584235773197863?l=rknowsys-ror.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rknowsys-ror.blogspot.com/feeds/9105584235773197863/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4494660564939106638&amp;postID=9105584235773197863' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4494660564939106638/posts/default/9105584235773197863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4494660564939106638/posts/default/9105584235773197863'/><link rel='alternate' type='text/html' href='http://rknowsys-ror.blogspot.com/2008/11/tutorial-on-hosting-ror-ruby-on-rails.html' title='Tutorial on hosting a RoR (Ruby on Rails) application on Amazon AWS with EC2 and EBS.'/><author><name>kc</name><uri>http://www.blogger.com/profile/14967738987222471098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4494660564939106638.post-6996013267700634484</id><published>2008-11-19T02:07:00.000-08:00</published><updated>2009-01-08T00:41:16.833-08:00</updated><title type='text'>A perfetc world.. A world without IE ??</title><content type='html'>&lt;span style="font-size:100%;"&gt;It becomes a huge list when you pen down the IE bugs(even features), some of which you can't even dream of.&lt;br /&gt;I had my share of problems struggling for hours to get things work on a buggy IE(I refer to IE6 &amp;amp; IE7  which makes no difference).&lt;br /&gt;&lt;br /&gt;As I feel it probably a fitting context, I can't stop quoting this by someone on &lt;a href="http://ajaxian.com/"&gt;Ajaxian&lt;/a&gt;.&lt;br /&gt;"&lt;/span&gt;&lt;span style="font-style: italic;font-size:100%;" &gt;If you've been working with the Ajax framework long enough, I'm sure you've run into at least a few speed bumps thanks to Internet Explorer. Not a day goes by that I don't have to rewrite a line of code, or tweak my css in order for IE to render what I think it should. But alas, this is the nature of software that comes from a company that views Standard Compliances as recommendations.&lt;/span&gt;&lt;span style="font-size:100%;"&gt;"&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;Let me share with you a couple of issues I had to face.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;Recently, in my web-page, it was needed to dynamically change the options of a SELECT box. What I was doing was construct a string with options and append the the options string to the SELECT tag using innerHTML. This worked perfectly on my favourite FF and even on Safari. I am pretty sure it would have worked on any browser, you name it, with the exception of IE.&lt;br /&gt;&lt;br /&gt;Here is my code:&lt;br /&gt;&lt;/span&gt;&lt;pre&gt;&lt;span style="font-size:100%;"&gt;&lt;code&gt;var optionString = "";&lt;br /&gt;for(option in options) {&lt;br /&gt; &lt;/code&gt;&lt;code&gt;optionString&lt;/code&gt; += '&lt;code&gt;'+data[option]+'';&lt;br /&gt;}&lt;br /&gt;var sel = Document.getElementById("mySelectBoxId");&lt;br /&gt;sel.innerHTML = optionString;&lt;/code&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span style="font-size:100%;"&gt;What's happening in IE was, the first option tag is getting truncated and my SELECT box is shown empty.&lt;br /&gt;I broke my head examining my code for a bug but found none. The mighty Google to the rescue. &lt;span style="color: rgb(255, 0, 0);"&gt;It was revealed that this was because of this &lt;a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;276228"&gt;BUG in IE&lt;/a&gt;&lt;/span&gt;. &lt;/span&gt;&lt;span style="font-size:100%;"&gt;IE recommends using DOM to achieve this &lt;/span&gt;&lt;span style="font-size:100%;"&gt;and which I did to effect.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;The other issue is while using AJAX. I don't call it a bug(its rather more of a feature). I have a list of items which can be re-ordered by drag-drop. Whenever an item gets dragged, I make an AJAX GEt request to the server &lt;/span&gt;&lt;span style="font-size:100%;"&gt;and a re-ordered list of items had to served as response.&lt;/span&gt;&lt;span style="font-size:100%;"&gt; Again this works fine with FF and Safari. The problem is with IE again.&lt;br /&gt;&lt;br /&gt;When one of the item is dragged, IE is not always making a request to the server but the list gets re-ordered wrongly on the browser. It took me a whole day to figure out where things were going wrong.&lt;br /&gt;&lt;br /&gt;IE is not making the request but serving a stale cached response from previous requests which are identical. Some argue that its a feature with any browser to cache a response from a GET request. But IE's caching has always been an issue.&lt;br /&gt;&lt;br /&gt;We have two solutions for the above problem.&lt;br /&gt;One by making a POST request instead of a GET so that IE won't cache it.&lt;br /&gt;"&lt;span style="font-style: italic;"&gt;But I can't convince myself to make a POST request just to satisify IE where a simple GET best fits the job.&lt;/span&gt; "&lt;br /&gt;The other is to make your every request unique. For this you can append a random string or a timestamp  as a useless parameter at the end of your request URL.&lt;br /&gt;"&lt;span style="font-style: italic;"&gt;By making requests unique, you can achieve a proper response from the server in this case, but IE still  caches this response. When these requests are numerous, the browser cache overflows and you may loose some important cached response of other requests.&lt;/span&gt;"&lt;br /&gt;&lt;br /&gt;So, there is always a trade off involved. Its upto the developer to choose a solution that best fits his job.&lt;br /&gt;&lt;br /&gt;The list doesn't end here. It's just that I didn't come across but others might have. I will keep adding such issues if any. I wish I don't.&lt;br /&gt;&lt;br /&gt;&lt;a style="color: rgb(255, 0, 0);" href="http://it-gears.blogspot.com/2007/01/ie7-nightmare-for-web-developers.html"&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;"&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;a style="color: rgb(255, 0, 0);" href="http://it-gears.blogspot.com/2007/01/ie7-nightmare-for-web-developers.html"&gt;&lt;span style="font-weight: bold; color: rgb(0, 102, 0);"&gt;Have fun with you code and don't hate it :) hate the things that don't comply to the standards...&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:100%;"&gt;&lt;a style="color: rgb(255, 0, 0);" href="http://it-gears.blogspot.com/2007/01/ie7-nightmare-for-web-developers.html"&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;"&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;Now is it a fitting description to call it A perfect world.. A world without IE ??&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4494660564939106638-6996013267700634484?l=rknowsys-ror.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rknowsys-ror.blogspot.com/feeds/6996013267700634484/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4494660564939106638&amp;postID=6996013267700634484' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4494660564939106638/posts/default/6996013267700634484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4494660564939106638/posts/default/6996013267700634484'/><link rel='alternate' type='text/html' href='http://rknowsys-ror.blogspot.com/2008/11/perfetc-world-world-without-ie.html' title='A perfetc world.. A world without IE ??'/><author><name>venkat</name><uri>http://www.blogger.com/profile/01415346584321750269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4494660564939106638.post-7087112185146090902</id><published>2008-09-28T23:41:00.000-07:00</published><updated>2008-09-28T23:48:50.662-07:00</updated><title type='text'>auto complete issue with non-Mozilla browsers</title><content type='html'>Hi,&lt;br /&gt;Playing with auto complete in Firefox is fun all the time , but this is not going to be same in Others Browsers(IE &amp;amp; Safari),&lt;br /&gt;after Googling for many days i came up with a pleasant solution.&lt;br /&gt;&lt;br /&gt;Rails2.0: auto_complete is now a plugin (it’s not in the core anymore), you will install it before using it:&lt;br /&gt;script/plugin install auto_complete&lt;br /&gt;&lt;br /&gt;Somewhere in your views you’ll want code somewhat like the following.&lt;br /&gt;&lt;%= text_field_with_auto_complete :article, :contains, { :size =&gt; 15 }, :skip_style =&gt; true %&gt;&lt;br /&gt;&lt;br /&gt;I specified a size for the text area with the :size =&gt; 15 values in the hash. I also included :skip_style =&gt; true which keeps the helper from automatically inlining CSS styles into the page.&lt;br /&gt;&lt;br /&gt;and now the major issue i faced with IE and Safari browsers are :&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Q. Up, Down arrow keys are not working for auto complete in non-mozilla browsers when drop down list appears&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;The solution is ..&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;This is due to a bug in Scriptaculous. At the time of writing you will need to apply the following patch that will fix it:&lt;/span&gt;&lt;br /&gt;in controls.js around line 86 you will observe these lines&lt;br /&gt;   Element.hide(this.update);&lt;br /&gt;  Event.observe(this.element, 'blur', this.onBlur.bindAsEventListener(this));&lt;br /&gt;      Event.observe(this.element, 'keydown', this.onKeyPress.bindAsEventListener(this));&lt;br /&gt;  },&lt;br /&gt;&lt;br /&gt;and now you modify above lines with the following code of lines :&lt;br /&gt;&lt;br /&gt;  Element.hide(this.update);&lt;br /&gt;      Event.observe(this.element, 'blur', this.onBlur.bindAsEventListener(this));&lt;br /&gt;      Event.observe(this.element, 'keypress', this.onKeyPress.bindAsEventListener(this));&lt;br /&gt;      // Observe keydown for non-Mozilla browsers per http://dev.rubyonrails.org/ticket/10126&lt;br /&gt;      if (Prototype.Browser.Gecko) {&lt;br /&gt;          Event.observe(this.element, 'keypress', this.onKeyPress.bindAsEventListener(this));&lt;br /&gt;          } else {&lt;br /&gt;          Event.observe(this.element, 'keydown', this.onKeyPress.bindAsEventListener(this));&lt;br /&gt;      }&lt;br /&gt;    },&lt;br /&gt;and restart the server ,now the arrow keys will work in both IE and Safari browsers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4494660564939106638-7087112185146090902?l=rknowsys-ror.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rknowsys-ror.blogspot.com/feeds/7087112185146090902/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4494660564939106638&amp;postID=7087112185146090902' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4494660564939106638/posts/default/7087112185146090902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4494660564939106638/posts/default/7087112185146090902'/><link rel='alternate' type='text/html' href='http://rknowsys-ror.blogspot.com/2008/09/auto-complete-issue-with-non-mozilla.html' title='auto complete issue with non-Mozilla browsers'/><author><name>srinath48</name><uri>http://www.blogger.com/profile/17945505160937254841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4494660564939106638.post-273253594268830868</id><published>2008-09-24T04:19:00.000-07:00</published><updated>2008-09-29T03:35:44.938-07:00</updated><title type='text'>improving performance with :select in rails</title><content type='html'>&lt;span style="color: rgb(0, 0, 0);font-family:verdana;font-size:85%;"  &gt;For newbies, rails is amazing. With its constituent modules &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-family:verdana;font-size:85%;"  &gt;such as active-record, action-pack, action-mailer etc.. acting behind the scenes, &lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;span style="color: rgb(0, 0, 0);"&gt;rails provides a lot of abstraction to the developers making things more simpler. Given this simplicity through abstraction, there follow some issues which may degrade your application performance when not taken care of properly.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Let's have a look at Active Record. It is Active Record that makes people go crazy about rails. It shoulders the responsibility of database operations for the users providing them with different flavours of methods to deal with. But there are some pitfalls to consider:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;1. The default 'find' method fetches all columns from a table row:&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Active Record works at the row level but not at the column level. Consider a table "employees" having emp_id, emp_name, emp_slary, emp_address and etc.. upto 50 columns. When you want to make a detailed  list of all the employess, you may tend to write&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;@employees = Employee.find(:all).&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;The above statement fetches all the fifty columns of every single employee from the table and converts it as Employee objects. What if you need only a set of &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;columns(say &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;span style="color: rgb(0, 0, 153);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;emp_id, emp_name, emp_slary, emp_address&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;span style="color: rgb(0, 0, 153);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;) but not all. Now you can achieve this using :select option in the find method&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;"&gt;            @employees = Employee.find(:all, :select =&gt; ['&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-family:verdana;font-size:85%;"  &gt;&lt;span style="color: rgb(0, 0, 153);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;emp_id', 'emp_name', 'emp_slary',&lt;br /&gt;                   'emp_address&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;span style="color: rgb(0, 0, 153);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;"&gt;']) &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;What this does is select only the specified columns from the table and converts it into Employee objects. Accessing unspecified attributes from the resultant Employee objects may reult in an Error/Exception, but saves a lot of overhead in selecting all the columns and turning the rows into heavy objects.&lt;br /&gt;&lt;br /&gt;Another case may be an articles table. Though it may seem to contain less number of columns, one tends to use a column for article body which may contain text as well as images(usually these type of columns are set to BLOB type). Here also, to make a list of all the articles, you can write&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;span style="color: rgb(0, 0, 153);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;"&gt;             @articles = Article.find(:all, :select =&gt; ['article_id', '&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-family:verdana;font-size:85%;"  &gt;&lt;span style="color: rgb(0, 0, 153);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;article_title', 'author_name',&lt;br /&gt;          'published_date'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;span style="color: rgb(0, 0, 153);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;"&gt;]) &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;span style="color: rgb(0, 0, 153);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;span style="color: rgb(0, 0, 153);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;and avoid the body column if you feel not needed.You are free to use all the other options along with :select.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;span style="color: rgb(0, 0, 153);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;2. Eagerloaded associations that contain heavy data:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;class Author &lt; ActiveRecord::Base&lt;br /&gt;  has_many :articles&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;class Article &lt; ActiveRecord::Base&lt;br /&gt;  belongs_to :author&lt;br /&gt;  has_many :comments&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;class Comment &lt; ActiveRecord::Base&lt;br /&gt;  belongs_to :article&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;Assuming that you know how to eagerload associated models using :include option , lets look at how we can finegrain the eagerloaded models using the :select option with :include.&lt;br /&gt;&lt;br /&gt;@author = Author.find(:id, :include =&gt; [:articles])&lt;br /&gt;&lt;br /&gt;This fetches an author's record and all the article records that belong to this author. But how to avoid fetching the heavy 'body' column from articles table. Can we use the :select to fetch only the desired columns from the associated model through :include ? This is not possible because eagerloading generates SELECT statement too, the use of :select together with :include is not supported . This can be achieved with a bit of extra code:&lt;br /&gt;&lt;br /&gt;Download the patch from http://dev.rubyonrails.org/attachment/ticket/7147/init.5.rb submitted by mrj to Rails Trac.&lt;br /&gt;Place this file in your lib directory and require it in environment.rb. For ex, if the file is named 'include_with_select.rb' in your lib, you can write in your environment.rb as:&lt;br /&gt;require 'include_with_select'.&lt;br /&gt;&lt;br /&gt;With this setup, you can freely select the desired columns in the :included associations as:&lt;br /&gt;@author = Author.find(:id, :include =&gt; [:articles[:article_id, :article_title, :author_name, :published_date]])&lt;br /&gt;&lt;br /&gt;If you want to eagerload a set of comment attributes for every article, you can write it as:&lt;br /&gt;@author = Author.find(:id, :include =&gt; [{:articles[:article_id, :article_title, :author_name, :published_date] =&gt; :comments[:comment_text, :comment_by]}])&lt;br /&gt;&lt;br /&gt;This way we can achieve a better performance using :select with/without :include.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4494660564939106638-273253594268830868?l=rknowsys-ror.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rknowsys-ror.blogspot.com/feeds/273253594268830868/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4494660564939106638&amp;postID=273253594268830868' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4494660564939106638/posts/default/273253594268830868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4494660564939106638/posts/default/273253594268830868'/><link rel='alternate' type='text/html' href='http://rknowsys-ror.blogspot.com/2008/09/improving-performance-with-select-in.html' title='improving performance with :select in rails'/><author><name>venkat</name><uri>http://www.blogger.com/profile/01415346584321750269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4494660564939106638.post-3174685286750284441</id><published>2008-09-18T05:22:00.000-07:00</published><updated>2008-09-29T02:33:48.477-07:00</updated><title type='text'>have you ever measured your rails application performance?</title><content type='html'>&lt;span style=";font-family:arial;font-size:85%;"  &gt;&lt;span style="font-family: verdana;"&gt;Well, you have been developing rails applications for over a year or couple&lt;/span&gt;. You did every bit of it  &lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;The Rails Way&lt;/span&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;&lt;span style=";font-family:verdana;font-size:130%;"  &gt; &lt;span style="font-size:85%;"&gt;keeping it  DRY, writing migrations, associating your models and built-in test cases. The app seems to work great on your local machine. But are you sure it does on the production server? Have you ever used any profiling or benchmarking tools to measure the performance of the apps? If not its time to use one and make sure your apps run faster not only during  development but also in the production environment.&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-family:arial;font-size:85%;"  &gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;As there are many such tools that serve the purpose, the two head-to-head competitors, RPM from &lt;/span&gt;&lt;a style="font-style: italic; font-family: verdana;" href="http://www.newrelic.com/"&gt;new relic&lt;/a&gt;&lt;span style="font-family:verdana;"&gt; and Five Runs from &lt;/span&gt;&lt;a style="font-style: italic; font-family: verdana;" href="http://www.fiveruns.com/"&gt;fiveruns&lt;/a&gt;&lt;span style="font-family:verdana;"&gt; , which are strongly backing the Rails framework  to become enterprise ready, make a good choice.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-family:arial;font-size:100%;"  &gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;Given the task to finetune a rails app, I preferred relic over fiveruns as it is very easy to get going. RPM Lite, a standard version of RPM is free as long as you want and you can always upgrade it to enjoy more featues. For a developer use, RPM Lite is enough.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-family:arial;font-size:100%;"  &gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;span style="font-family:verdana;"&gt;RPM Lite is available as a plugin. I got the plug-in installation link through subscription at &lt;a href="http://www.newrelic.com/"&gt;new relic&lt;/a&gt;, installed it and restarted my server.&lt;br /&gt;Note: The plug-in installation creates a &lt;/span&gt;&lt;span style="font-style: italic;font-family:verdana;" &gt;config/newrelic.yml&lt;/span&gt;&lt;span style="font-family:verdana;"&gt; file. I didn't pay much attention to it. But it may contain some interesting configuration.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-family:arial;font-size:100%;"  &gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;span style="font-family:verdana;"&gt;Now, whenever I made a request to the server, the relic plugin monitored my request and measured the time for processing my request. This is available at &lt;a href="http://localhost:3000/newrelic"&gt;http://localhost:3000/newrelic&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Amazingly, relic tracked my request right from the controller to the model to the view.&lt;br /&gt;1. It gave me an analysis of time spent in the controller, the model/db calls executed and to&lt;br /&gt;render the results to my view to an accuracy of milli seconds.&lt;br /&gt;2. It also produced a pie-chart of the processes involved.&lt;br /&gt;3. It provided me with an sql view, where I could track the sql executed.&lt;br /&gt;4. Number of such requests that could be server per second.&lt;br /&gt;5. It also  tracked AJAX requests.&lt;br /&gt;&lt;br /&gt;From the analysis, I learnt that the app is spending most of the timein DB calls which I eventually reduced.&lt;br /&gt;This way, I could make a better use of RPM and finetuned the app resulting in a notable performance boost. So, why not give it a try right now. I hope RPM will serve the purpose for you too.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-family:arial;font-size:85%;"  &gt;&lt;span style=";font-family:verdana;font-size:100%;"  &gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4494660564939106638-3174685286750284441?l=rknowsys-ror.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rknowsys-ror.blogspot.com/feeds/3174685286750284441/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4494660564939106638&amp;postID=3174685286750284441' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4494660564939106638/posts/default/3174685286750284441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4494660564939106638/posts/default/3174685286750284441'/><link rel='alternate' type='text/html' href='http://rknowsys-ror.blogspot.com/2008/09/have-you-ever-measured-your-rails.html' title='have you ever measured your rails application performance?'/><author><name>venkat</name><uri>http://www.blogger.com/profile/01415346584321750269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4494660564939106638.post-4762257854211066713</id><published>2007-09-13T01:30:00.000-07:00</published><updated>2007-09-13T03:22:28.769-07:00</updated><title type='text'>integrating google maps with rails applications</title><content type='html'>I have spent some time on integrating google maps with rails applications. I would like to share my work with you here.&lt;br /&gt;&lt;br /&gt;I tried to post the code here but the blog site seems to be not supporting html tags. If anyone wants to have a look at the code, please feel free to email me  at  "&lt;span style="font-weight: bold;"&gt;ravivardhan.k@rknowsys.com&lt;/span&gt;"&lt;br /&gt;&lt;br /&gt;thanks,&lt;br /&gt;Ravi K .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4494660564939106638-4762257854211066713?l=rknowsys-ror.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rknowsys-ror.blogspot.com/feeds/4762257854211066713/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4494660564939106638&amp;postID=4762257854211066713' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4494660564939106638/posts/default/4762257854211066713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4494660564939106638/posts/default/4762257854211066713'/><link rel='alternate' type='text/html' href='http://rknowsys-ror.blogspot.com/2007/09/integrating-google-maps-with-rails.html' title='integrating google maps with rails applications'/><author><name>Ravi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4494660564939106638.post-1534705328328597502</id><published>2007-08-31T04:50:00.000-07:00</published><updated>2007-10-29T06:16:05.205-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='radrails'/><category scheme='http://www.blogger.com/atom/ns#' term='aptana'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Installing Aptana+RadRails plugin on ubuntu</title><content type='html'>I have taken all the pain installing Aptana 0.2.9(with radrails) on my ubuntu 7.04 machine and would like to present a better way of Aptana installation.&lt;br /&gt;&lt;br /&gt;Following are the steps to be followed to get Aptana installed (with rails support) on ubuntu.&lt;br /&gt;&lt;br /&gt;       All the downloads are pointed to foo's desktop which is equivalent to the directory /home/foo/Desktop (foo is the user-name of&lt;br /&gt;       the current user of the system)&lt;br /&gt;&lt;br /&gt;   1. Download Aptana for linux from "http://www.web20.com/downloads/current/Linux/VM/Aptana_IDE_Setup.bin" to yuor Desktop.&lt;br /&gt;&lt;br /&gt;   2. After the download gets finished, open a terminal. Open /etc/apt/sources.list and make sure you have the universe&lt;br /&gt;          repository enabled:&lt;br /&gt;                    &lt;br /&gt;                   sudo gedit /etc/apt/sources.list&lt;br /&gt;&lt;br /&gt;              deb http://de.archive.ubuntu.com/ubuntu/ edgy universe&lt;br /&gt;&lt;br /&gt;   3. If you had to modify /etc/apt/sources.list, you must update the package database afterwards:&lt;br /&gt;                &lt;br /&gt;                   sudo apt-het update&lt;br /&gt;&lt;br /&gt;   4. Aptana depends upon the following two packages. So, You need to install these as&lt;br /&gt;&lt;br /&gt;          sudo apt-get install mozilla libswt3.1-gtk-java&lt;br /&gt;&lt;br /&gt;          this will throw some error messages but dont take a note of that.Those errors rise because of the newer versions of those libraries&lt;br /&gt;          that already exist on the machine.&lt;br /&gt;&lt;br /&gt;   5. Now start the installation as&lt;br /&gt;          &lt;br /&gt;              /bin/bash Aptana_IDE_Setup.bin      wil throw some errors as&lt;br /&gt;&lt;br /&gt;            falko@falko-desktop:~/Desktop$ /bin/bash Aptana_IDE_Setup.bin&lt;br /&gt;     &lt;br /&gt;       Preparing to install...&lt;br /&gt;       Extracting the JRE from the installer archive...&lt;br /&gt;       Unpacking the JRE...&lt;br /&gt;       Extracting the installation resources from the installer archive...&lt;br /&gt;       Configuring the installer for this system's environment...&lt;br /&gt;       nawk: error while loading shared libraries: libdl.so.2: cannot open shared object file: No such file or directory&lt;br /&gt;       dirname: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory&lt;br /&gt;       /bin/ls: error while loading shared libraries: librt.so.1: cannot open shared object file: No such file or directory&lt;br /&gt;       basename: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory&lt;br /&gt;       dirname: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory&lt;br /&gt;       basename: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory&lt;br /&gt;       hostname: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory&lt;br /&gt;&lt;br /&gt;       Launching installer...&lt;br /&gt;&lt;br /&gt;       grep: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory&lt;br /&gt;       /tmp/install.dir.7470/Linux/resource/jre/bin/java: error while loading shared libraries: libpthread.so.0: cannot open&lt;br /&gt;       shared object file: No such file or directory&lt;br /&gt;&lt;br /&gt;          If you get these error messages, do the following...&lt;br /&gt;&lt;br /&gt;          cp Aptana_IDE_Setup.bin Aptana_IDE_Setup.bin.bak&lt;br /&gt;      cat Aptana_IDE_Setup.bin.bak | \&lt;br /&gt;          sed "s/export LD_ASSUME_KERNEL/#xport LD_ASSUME_KERNEL/" &gt; \&lt;br /&gt;          Aptana_IDE_Setup.bin&lt;br /&gt;&lt;br /&gt;   6. Aptana Installer will come up. Now accept the defaults and click on "Done" to finish the installation.&lt;br /&gt;&lt;br /&gt;       7. Create a script to set an environment variable (MOZILLA_FIVE_HOME) for Aptana and place it in /usr/bin&lt;br /&gt;&lt;br /&gt;          for that do the following:   gedit aptana&lt;br /&gt;&lt;br /&gt;          this opens an empty text file named aptana in the gedit editor. Now place the following script in the opened file .&lt;br /&gt;&lt;br /&gt;          #/usr/bin&lt;br /&gt;          export MOZILLA_FIVE_HOME=/usr/lib/mozilla&lt;br /&gt;          ~/Aptana/aptana&lt;br /&gt;&lt;br /&gt;   8. Now letrs make the file executable and place it in /uer/bin directory.For that&lt;br /&gt;&lt;br /&gt;          chmod 755 aptana&lt;br /&gt;      sudo mv aptana /usr/bin/&lt;br /&gt;&lt;br /&gt;          Aptana is now installed.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; To create a menu entry for Aptana, just follow me :&lt;br /&gt;&lt;br /&gt;       9. Download the aptana icons from "http://www.aptana.com/trac/attachment/ticket/702/icons.zip" .&lt;br /&gt;&lt;br /&gt;   10. Extract the icons to yuor desktop.Move these icons to /usr/share/pixmaps/&lt;br /&gt;&lt;br /&gt;           sudo mv aptana_* /usr/share/pixmaps/&lt;br /&gt;&lt;br /&gt;   11. Right-click on Applications and select Edit Menus:&lt;br /&gt;       &lt;br /&gt;           In the programming subcategory, click on "New Item".&lt;br /&gt;&lt;br /&gt;           In the Menu Item Properties window that pops up, fill in the following details:&lt;br /&gt;&lt;br /&gt;           Name : Aptana&lt;br /&gt;       Comment : Aptana&lt;br /&gt;           Command : aptana or /usr/bin/aptana   (this is the script you have written earlier)&lt;br /&gt; &lt;br /&gt;           Now click on "No Icon" button.&lt;br /&gt;           In the file browser, navigate to /usr/share/pixmaps and select the aptana_32x32.png icon. Click on OK:&lt;br /&gt;           You will now see the Aptana icon in the Menu Item Properties window. Click on OK:&lt;br /&gt;       Then close the Menu Layout window:&lt;br /&gt;&lt;br /&gt;   12. Go to Applications -&gt; Programming , you will find Aptana . Click on the Aptana to start Aptana.&lt;br /&gt;&lt;br /&gt;   &lt;br /&gt;   If you are unable to start aptana, I have a work-around for that. In Step 11:&lt;br /&gt;&lt;br /&gt;           for the Command : /home/foo/Aptana/Aptana_IDE_Beta/Aptana&lt;br /&gt;&lt;br /&gt;           The directory /home/foo/Aptana is the directory where Aptana is installed. If Aptana is installed to some othet directory&lt;br /&gt;           you need to feed that path.&lt;br /&gt;&lt;br /&gt;   Now repeat the Step 12 . Aptana should be starting this time...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  Now lets discuss configuring "RadRails" plugin for Aptana...&lt;br /&gt;&lt;br /&gt;   13. Note that if you are behind a proxy , you need to configure that. To do so,&lt;br /&gt;&lt;br /&gt;           go to Window -&gt; preferences -&gt; install/update , check the box to the right of "Enable Http proxy connection" and fill the&lt;br /&gt;           details and click on "Apply" and "OK"&lt;br /&gt;&lt;br /&gt;   14. Go to Help -&gt; Software Updates -&gt; Find and Install -&gt; Search for new features to install and click on "Next"&lt;br /&gt;&lt;br /&gt;           Select the "Ruby on Rails Development Environment" and click on "finish" and just follow the dialogue prompts to complete&lt;br /&gt;           the installation.&lt;br /&gt;&lt;br /&gt;   Now when you restart Aptana you will be able to see RadRails perspective.&lt;br /&gt;&lt;br /&gt;       15. Like wise you can also install the "Subclipse" just as you have installed "RadRails" in the above step.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   Thats all...I think every thing should be working fine now...&lt;br /&gt;&lt;br /&gt;   If you still face any problems, feel free to post a comment in the blog.&lt;br /&gt;&lt;br /&gt;thanks and regards,&lt;br /&gt;Venkat.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4494660564939106638-1534705328328597502?l=rknowsys-ror.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rknowsys-ror.blogspot.com/feeds/1534705328328597502/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4494660564939106638&amp;postID=1534705328328597502' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4494660564939106638/posts/default/1534705328328597502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4494660564939106638/posts/default/1534705328328597502'/><link rel='alternate' type='text/html' href='http://rknowsys-ror.blogspot.com/2007/08/installing-aptanaradrails-plugin-on.html' title='Installing Aptana+RadRails plugin on ubuntu'/><author><name>venkat</name><uri>http://www.blogger.com/profile/01415346584321750269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
