Ruby's class_eval & instance_eval. Is it that confusing?

We can do class_eval & instance_eval using following syntax,
In this example, class_eval? method can be accessed my any objects of the String class. Where as instance_eval? method can be accessed by only String class. 

More clearly, class_eval creates instance methods, but instance_eval creates class methods or it can be applied to only one object at a time.

[3] pry(main)> String.class_eval?
NoMethodError: undefined method `class_eval?' for String:Class
Did you mean?  class_eval
from (pry):3:in `<main>'
[4] pry(main)> String.instance_eval?
=> true
[5] pry(main)>
=> true

my_string = "This is a string"

For example you can simply do like below as any string is an object of String Class
[5] pry(main)> my_string.class_eval?
=> true

But you can not do 
[7] pry(main)> my_string.instance_eval?
NoMethodError: undefined method `instance_eval?' for "This is a string":String

Install Nginx & passenger in CentOS 6.x

Nginx Installation First of all, nginx is not a repo available under yum. But you can install epel, through which install nginx.

1. Install EPEL
yum install epel-release


sudo rpm -iUvh epel-release-6-8.noarch.rpm

2. Check EPEL repo
yum repolist

You should get

HPIT-v2cloud-RedHat-nover-x86_64                  HPIT-v2cloud-RedHat-nover-x86_64  0
HPIT-v2cloud-nodist-nover-noarch                      HPIT-v2cloud-nodist-nover-noarch   22
HPIT-v2cloud-nodist-nover-x86_64                     HPIT-v2cloud-nodist-nover-x86_64    3
RedHat-6.5Server-x86_64-Server                        RedHat Linux 6.5Server - os - x86_64 - Server
RedHat-updates-QPK-6Server-x86_64                RedHat-updates-QPK-6Server-x86_64
centos-gluster37                                                    CentOS-6Server - Gluster 3.7
*epel                                                                     Extra Packages for Enter…

Installation guide for RVM Multiuser

When I was trying to install RVM for multiuser, There was no proper guidelines for it. So I decided to create one. Please follow the below steps to install RVM for multiuser.

1. Install mpapis public key
sudo gpg2 --keyserver hkp:// --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
curl -sSL | sudo gpg2 --import
2. Install RVM for Multiuser
curl -L | sudo bash -s stable

3. Load RVM to Environment

echo "[[ -s /usr/local/rvm/scripts/rvm ]] && source /usr/local/rvm/scripts/rvm" >> ~/.bashrc  source .bashrc

4. Reload shell configuration & test
Close out your current shell or terminal session and open a new one (preferred). You may load RVM with the following command:
source /usr/local/rvm/scripts/rvm

5. Final Testing
If installation and configuration were successful, RVM should now load whenever you open a new shell. This can be tested by executing the following command which should output rvm is a f…

Ruby Proc & Lamda - A close look

One of the core concepts about Ruby that a programmer should remember is that blocks are not objects. It is possible to convert them into objects by wrapping them inside the “Proc” class instance. The “Proc” and “Lambda” classes are probably the most awesome aspects of Ruby and need to be used well in order to get the desired results. Not much of knowledge is available on how to use Procs and Lambdas and what the differences between both are. I’d like to take a stab at how we can differentiate between Procs and Lambdas with a couple of thoughts below.
1. Proc doesn’t check the parameters passed, but Lambda does
> proc1 = { |a, b| a + 5 }
>      # call with only one parameter
=> 7                    # no error, unless the block uses the 2nd parameter

> lambda1 = lambda { |a, b| a + 5 }
ArgumentError: wrong number of arguments (1 for 2)

Proc will throw error only if the block uses the second param.
> proc2 = { |a, b| …

Rails 4, MySQL, and Emoji (Mysql2::Error: Incorrect string value: '\xF0\x9F\x8C\x9D')

Step 1

Change encoding from utf8 to utf8mb4
class ConvertTableToUtf8mb4 < ActiveRecord::Migration
  def change
    # For the table that will store unicode execute:
    execute "ALTER TABLE `table_name` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin"
    # For each column with unicode content execute:
    execute "ALTER TABLE `table_name` CHANGE column_name VARCHAR(226) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin"
Step 2

Change database.yml according to the changes made.

  adapter: mysql2
  database: database_name
  username: username
  password: password
  encoding: utf8mb4
  collation: utf8mb4_unicode_ci

Elasticsearch error – failed to connect to master

Elastic Search Version : 1.4.4
Device : Mac OS

When ever I start elastic search, sometimes I'll get an error like this

failed to connect to master [[Sea Urchin][OCeACmvgQsqw-uRUq25UFA][Srinivasan.local][inet[/]]], retrying...  Eventually I found the root cause of this issue. As I’m running elasticsearch on a single server ( development environment ), I had to do only one thing

Go to config/elasticsearch.yml and enable false

Rails 4 WITH NO Database

Sometimes, you may want to create a Rails application without ActiveRecord or a database. There might be situations like, Your application only store data using third party APIs, or storing in to files or might not have any persistent data at all. Since Rails stands for the common case (database backed application), by default it fails to start the server without a database connection.

You can simply build a Rails app without a database:
Comment / Remove any database gems ( mysql, mysql2, sqlite, pg, mongoid, etc..) from your Gemfile and then run bundle.  Open your application.rb. By default, in Rails 4.0 you can see one line which requires all of Rails:
require 'rails/all'This includes ActiveRecord also, and requires a database connection. Instead, you can include the specific parts of Rails that you gonna use.
See below:
require 'action_controller/railtie'require 'action_mailer/railtie'require 'active_model/railtie'require 'sprockets/railtie…