Pages

Thursday 6 December 2012

Setting up Sunspot-Solr in Production with jdk And Apache Tomcat

As you all know Apache Solr is the popular, blazing fast open source enterprise search platform from the Apache Lucene project. Its major features include powerful full-text search, hit highlighting, faceted search, dynamic clustering, database integration, rich document (e.g., Word, PDF) handling, and geospatial search. Solr is highly scalable, providing distributed search and index replication, and it powers the search and navigation features of many of the world's largest internet sites.

Sunspot is a ruby library for the expressive, powerful interaction with the solr search engine. Sunspot is built on the top of RSolr library. Which provides a low level interface for solr interaction, Sunspot provides a simple, intuitive, expressive DSL backed by powerful features for indexing objects and searching for them.

When we are working with RoR we can install sunspot by adding two gems to the Gemfile and do bundle install.

gem 'sunspot_rails'

gem 'sunspot_solr'

Then do bundle insatall.

bundle install

Then generate a default configaration file.

rails generate sunspot_rails:install

Now lets look how we can setting up solar on the system. For installing Solr we need Java in our system. So first we can set up  and configure Java. Install latest jdk to your system. You can either go to sun website and download the package and install it or use apt-get. For the later first run

apt-get update

It will update our source and find the latest packages. Then run
apt-get install openjdk-version-jdk

After completion of installation you should set the path and the java_home to .bashrc file for both root and local.

1. /home/user/.bashrc
2. /root/.bashrc
Then add
1. export PATH=~/java_installation_path(eg:/usr/lib/jvm/java-version)/bin:$PATH
2. export JAVA_HOME=~/java_installation_path(eg:/usr/lib/jvm/java-version)

After adding the above please do "source .bashrc" to affect changes.

If the above mentioned didn't went well please go through the below link. It is a lengthy process bu the job will get done definitely.

http://www.wikihow.com/Install-Oracle-Java-on-Ubuntu-Linux

Next step is installing latest tomcat to your system.

apt-get install tomcat7 tomcat7-admin tomcat7-common tomcat7-user tomcat7-docs

apt-get install libmysql-java(optional)

To test tomcat run
/etc/init.d/tomcat7 start

/etc/init.d/tomcat7 status

Now we need to give permission to user for accessing this.
nano /etc/tomcat7/tomcat-users.xml


It will open the above file and add the following lines to the file.
role rolename="manager"
role rolename="admin"
user username="admin" password="SPECIAL" roles="manager,admin"
Note: Each line should add as xml, means there should be starting and ending tags.

Then add Data Directory and give permission.
mkdir /var/lib/tomcat7/solr/data
chown -R tomcat7:tomcat7 /var/lib/tomcat6/solr/data/

There are some more permissions we have to give.
chown -R tomcat7:tomcat7 /var/lib/tomcat7/
chmod 775 /var/lib/tomcat7/conf/tomcat-users.xml
chmod 775 /var/lib/tomcat7/conf/Catalina/localhost/solr.xml

Wow we almost done. It is the time to test. Re-start Tomcat!!!!
/etc/init.d/tomcat7 restart
To test:
curl http://127.0.0.1:8080/solr/admin/

One last thing!!!!!!!! If you are using Rails for your site please do the following step. Copying the rails config file:
cp RAILS_ROOT/solr/conf/schema.xml /var/lib/tomcat7/solr/conf/schema.xml
/etc/init.d/tomcat7 restart

Wednesday 5 December 2012

An Introduction to Sql Procedures

As I mentioned in my previous post "Lets play with Sql" we can use SQL  programmatically for data manipulation. SQL Procedures and functions helps to full fill this. Using procedures we can execute number of operations or queries with in one procedure call. More over we can call a procedure with in another procedure like other languages.

Syntax of Creating Procedure is

CREATE PROCEDURE procedure_name()

          BEGIN
            .
            .
            .
          END 

With in BEGIN and END we write the procedure body includes queries,loops,string manipulations etc. We can store this procedure for future use. We can call the stored procedure in future. The syntax for calling procedure is
CALL procedure_name()
There is another good way to create and call procedures. We can store procedures in a text file. Then first load this text file to sql by this time the procedure will store. For this we can use
source file_name
in MySQL prompt. After loading we can call the procedure using CALL command.

We can Drop an existing procedure using command
DROP PROCEDURE procedure_name

Now we can go more deeper. For that Lets look in to one example.

DELIMITER $$
 DROP PROCEDURE IF EXISTS WhileLoopProc$$
 CREATE PROCEDURE WhileLoopProc()
 BEGIN
   DECLARE x  INT;
   DECLARE str  VARCHAR(255);
   SET x = 1;
   WHILE x  <= 30 DO
     SET str = (SELECT name FROM sanity WHERE id=x);
     SET  x = x + 1;
     SELECT str;
   END WHILE;
 END$$
DELIMITER;

In this example we have already discussed the section before 'BEGIN'. DECLARE is the key word using for declaring variables and 'SET' is using for assigning value to a variable.The next section is a while loop for selecting name corresponds to id and print the same. For printing a value we use 'SELECT' key word.

If you understand above example it is time to go little more deeper. Before that it is better to go through the link given below.
http://dev.mysql.com/doc/refman/5.0/en/string-functions.html
It gives descriptions about various string functions.

DELIMITER $$
 DROP PROCEDURE IF EXISTS CursorProc$$
 CREATE PROCEDURE CursorProc()
 BEGIN
  DECLARE str  VARCHAR(255);
  DECLARE cur1  CURSOR FOR SELECT name FROM sanity LIMIT 500;
  OPEN cur1;
  read_loop: LOOP
   FETCH cur1 INTO str;
   SET str = TRIM(LEADING '"' FROM str);
   SET str =TRIM(TRAILING '"' FROM str);
   CALL selct_proc( str);
  END LOOP; 
  CLOSE cur1;
 END$$
DELIMITER ;

DELIMITER $$
DROP PROCEDURE IF EXISTS selct_proc$$
CREATE PROCEDURE selct_proc(INOUT str1 VARCHAR(25))
BEGIN
 DECLARE str_dot  VARCHAR(255);
 DECLARE str_rplce  VARCHAR(255);
 DECLARE first_str  VARCHAR(255);
 SET str_dot = LOCATE(".",str1);
 IF str_dot != 0 then
  SET str_rplce = REPLACE(str1, '.', ' ');
  SET first_str = SUBSTRING_INDEX(str_rplce,' ',1);
  SELECT str_rplce,first_str;
 END IF;
END$$
DELIMITER ; 

This above example covers almost all basics like Loop, If conditions calling a procedure with in another procedure,passing parameters and using strong string functions for manipulating strings.


In the above example we using a variable cur1 it is for storing all the data after executing the query. Then inside a loop using FETCH key word we are accessing each value into a string. Then using some string function we styling the string. Then we are calling a procedure inside and passing a variable. In the second one we accessing the variable,here you see a key word INOUT this fore returning the value back. Here we are using a small IF construct to familiar with that.

This is only a small introduction to the topic. But by going through this you can start to play with procedures. And the main advantage of using procedures is its speed of execution. It is very much faster than writing script  for job done. So lets try.

Tuesday 4 December 2012

Setting up Ruby and Rails using RVM in ubuntu systems

As a RoR developer the first hurdle I faced was proper installation of rails using rvm, same as many others. Installed and re-installed number of times, followed number of tutorials. From that experience trying to consolidate the steps need for installation that I found from different tutorials.

 Lets directly go to the steps.

First we need to set up some platform for installing the RVM and Rails.
sudo apt-get install build-essential git-core curl libmysqlclient16-dev nodejs
these are some plug-ins to make the job easy.

To install the latest RVM first we need to remove the old version if it is there
sudo apt-get --purge remove ruby-rvm 

Then we need to remove two files from the system
sudo rm -rf /usr/share/ruby-rvm /etc/rvmrc /etc/profile.d/rvm.sh 

We can confirm the removal using the below command
env | grep rvm 
If the RVM is still there it shows the path as out put.

The next step is downloading and installing latest stable RVM available. For that we can use curl command.
curl -L get.rvm.io | bash -s stable --auto 

The above command will download and install the latest stable RVM package. At the end of the installation the system may throw some messages by asking some plug-ins are missing. Mostly the the system will show the required plug-in name. Then we can install those using apt-get command.

Otherwise from my experience you can give the below command to solve the problem. This will install almost all dependencies needed by RVM.
sudo apt-get install build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison subversion

Then run the following command for confirmation.
source "/usr/local/rvm/scripts/rvm" 
or
source ~/.rvm/scripts/rvm

We are doing this to make RVM to use as function. Then run

type rvm | head -n 1

if you are getting  rvm is a function as out-put the problem is solve.
Now we done with all the foundations. Next step is installing ruby. We can install different versions using RVM.
rvm install ruby-version(eg: 1.9.2 or 1.9.3 ) 
We only need to give the version number, no need of giving prefix ruby 


If number of versions are there in our system then we can use the following command to use a desired version as default.
rvm --default use ruby-version(eg: 1.9.2 or 1.9.3) 

Then we can check which ruby we are using as default by the following command.
ruby -v

Now we can install rails to our system. We will install rails using "gem" installer. If the system throwing any error like gem is not found,you need to install the gem installer first. After that we can install rails.
gem install rails

If you use the above command it will install the latest version of rails. If spesific version need to be installed,can use the below command
gem install rails 'version'(eg: 3.1.2 or 3.1.3)

Run the below command in your terminal
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"

If you want to disable installation of gem documentation while installing new gems,you can try the following command. It is optional.
echo "gem: --no-rdoc --no-ri" > ~/.gemrc 
The above command will add this line to "gemrc" file.

Lets enjoy the rails experience.