Monday, November 17, 2008

Load Balancing with pound and Mongrel Clustering

In my previous post I have written about mongrel clustering..

Now if you want to add the load balancing feature to it you may use pound. Pound is a software HTTP Load Balancer and Reverse Proxy.

These are the steps how you can configure pound with mongrel cluster. First configure mongrel cluster as per the previous post.

Then download and install pound from http://www.apsis.ch/pound/Pound-2.0.9.tgz

Now the configuration step

Pound.cfg needs to be configured which will reside in /etc/pound/pound.cfg

also a symlink is required to be made

$ sudo ln -s /etc/pound/pound.cfg /usr/local/etc/pound.cfg

A basic version of pound.cfg will look something like this

User "www-data"
Group "www-data"
LogLevel 2
Alive 30

ListenHTTP
Address 123.123.123.123
Port 80
End

Service
HeadRequire "Host:.*www.dhavalparikh.co.in.*"
BackEnd
Address 127.0.0.1
Port 8080
End
Session
Type BASIC
TTL 300
End
End

Service
URL ".*.mov"
BackEnd
Address 69.12.146.109
Port 8081
End
Session
Type BASIC
TTL 300
End
End

Service
# Catch All
BackEnd
Address 127.0.0.1
Port 9000
End
BackEnd
Address 127.0.0.1
Port 9001
End
Session
Type BASIC
TTL 300
End


Then start pound with the following command

$ sudo /etc/init.d/pound start

finally you will have mongrel cluster setup done so start mongrel cluster

sudo mongrel_rails cluster::start

Thats it you mongrel cluster with pound configuration is done..
njoi the power of load balancing


Saturday, November 8, 2008

Mongrel Clustering with Rails

Hey every one wants to make their site run faster..and there are many ways like caching (page caching, fragment caching, method caching) so on. One other way is using mongrel cluster which will run multiple instance of mongrel on you server which will help to improve website speed to a huge extent.

Let me tell you the steps for doing mongrel clustering .. its really easy..

Step 1 : - Install mongrel cluster gem

sudo gem install mongrel_cluster

Step 2 : - configure cluster and run the config file which will reside in config/mongrel_cluster.yml

mongrel_rails cluster::configure -p 8000 -e production -a 127.0.0.1

Well thats it now here you go


Start the cluster:
mongrel_rails cluster::start

Restart the cluster:
mongrel_rails cluster::restart

Stop the cluster:

mongrel_rails cluster::stop

Well just try these steps and if you are not able to configure it just post a
comment and i will get back to you.

Enjoy better speed :)

Wednesday, September 17, 2008

Page Screenshot in Rails

Have you ever been through a situation where you need to embed a Flash object or some other element in a pdf file which cant be done directly? There is gr8 solution for it

with the help or combination of RMagick + Image Magick + win32Screenshot gem you can take the screenshot of the desktop or webpage and generate an image from it and eventually embed it in your pdf file

Here is the code for it

require 'win32screenshot'
require 'RMagick'    
def screenCapture     
  width, height, bitmap = Win32::Screenshot.desktop     
  img_lst = ImageList.new     
  img_lst.from_blob(bitmap)     
  img_lst.write('public/screen.png')     
 true   
end

If you are stuck any where just write to me or post a comment here
I would be pleased to solve your error

Sunday, August 31, 2008

Flex On rails

Hi all

With the increasing number of sites being made in RIA - Rich Internet Applications many people have adopted Rails + Flex for make a Rich Internet Application.

There is a very gr8 plugin or code available on code.google.com known as ruby on rails ria sdk by adobe. Here is the url for it

http://code.google.com/p/rubyonrails-ria-sdk-by-adobe/

The Ruby on Rails RIA SDK by Adobe provides developers with samples and code to help develop solutions with Ruby and Adobe technologies. The SDK includes open source code created by third parties as well as samples and demos that have been created by project members.

You can download an initial .zip file containing all the files using the Download link on the right hand side, or you can check out the code via SVN by clicking on the 'Source' tab on the top of the page.

This will help you to get things going and working with Rails + Adobe technology.


Hope this helps

Thanks

Dhaval Parikh
Software Engineer
Ruby on Rails
http://www.dhavalparikh.co.in

Wednesday, August 20, 2008

Latest RoR plugins

Hi all

I am creating this post for all those who wants to get updated regarding whats demanding in RoR and which are the new plugins which will eventually make their coding easier and faster...

So as and when i will come across such link or sites or plugins I will be updating so keep visiting this page...

Also I might have implemented these plugins and would be tested..so if you have any problem in implementing them do write a mail to me.


1) Dynamic Tags with RoR :- Tagging for faster search

http://agilewebdevelopment.com/plugins/dynamically_tags and http://blog.jasoncrystal.com/2008/08/17/rails-plugin-dynamically_tags/

2) Open id integration with Rails :- A plugin that makes openid super simple.

http://github.com/madnificent/openid_enabled/wikis


3) Google Sitemap :- A google sitemap plugin for rails websites. It generates dynamic sitemaps based on your models and named routes. It has a full mvc stack that you can configure.
http://agilewebdevelopment.com/plugins/sitemap
http://gethandcrafted.com/

4) attachment_fu_app_engine : - Extension for AttachmentFu (http://github.com/technoweenie/attachment_fu) which uses the Google App Engine for storage and image resizing. Allows you to add or change thumbnail sizes without migrating previous data and removes the need to install ImageMagick.

Here are few new additions which I found useful have a look @ them

1) RQuote :- Gets realtime stock quotes from Yahoo Finance.

http://github.com/johnyerhot/rquote/tree/master download and njoi very easy to implement

2) Mobile_fu :- If Want to automatically detect mobile devices that access your Rails application? Mobile Fu allows you to do just that. People can access your site from a Palm, Blackberry, iPhone, Nokia, etc. and it will automatically adjust the format of the request from :html to :mobile.

script/plugin install git://github.com/brendanlim/mobile-fu.git

3) Act As nice url :- This acts_as extension provides the
capabilities for creating a nice url based on an attribute of the current object.
You can set / unset the object id in front of the URL and choose the object
attribute to use to generate the URL.
more to go.. Even you can post good plugins which are new by commenting on this post

Thanks

Dhaval Parikh
Software Engineer
Ruby on Rails
http://dhavalparikh.co.in

Friday, July 4, 2008

Open SSL with Rails

Well I was recently working with one application and
had to configure SSL with it..
Initially I faced few problems like I was getting the following Error

no such file to load -- openssl then I searched a lot and
found the following solution

IT will be helpful to all who face the same problem or who
wants to configure Open SSL

install openssl:

./config --prefix=/usr/local --openssldir=/usr/local/ssl
make
make test
make install (as root)
./config shared --prefix=/usr/local --openssldir=/usr/local/ssl
make clean
make
make install (as root)
cd /usr/local/ssl/lib
cp * /usr/lib

To avoid getting the following error later when you compile OpenSSH:

configure: error: Your OpenSSL headers do
not match your library

copy all the SSL include files everywhere:

cd /home/tjnelson/openssl/openssl-*
cd include/openssl
cp * /usr/include
cp * /usr/local/ssl/include
cp * /usr/local/ssl/include/openssl

and then add /usr/local/ssl/lib to /etc/ld.so.conf and type

ldconfig

Then i returned to ruby-*/ext/openssl and ran:

ruby extconf.rb
make clean
make
make install

This method works perfectly

Dhaval Parikh
http://www.dhavalparikh.co.in

Tuesday, July 1, 2008

Contact List importer in rails

Well I have been hearing this question a lot..Every one wants to market about their site directly from their place..So for that these days people are integrating 3rd party services where they can import contact lists from various address books such as gmail, yahoo, aol and so on...So I integrated plaxo which rails inorder to get this functionality in my site..

Here we go

First of all load these js in views


http://www.plaxo.com/css/m/js/util.js
http://www.plaxo.com/css/m/js/basic.js
http://www.plaxo.com/css/m/js/abc_launcher.js


this will help u to open the plaxo page where u will be able to nter the login details of your desired mail account and then import all the email list

This is the controller code which u need to write for calling the send mail option

def sendemail
@emails = params[:recipients].split(',')
for email in @emails
@send = Emailer.deliver_allcontacts(email,"", "Just Test", "Dont Worry its just an testing email")
end
flash[:notice] = "Mails are successfully sent"
redirect_to :action => 'invite'
end


finally the model

def allcontacts(to,from,subject,message)
@tomail = to
@from = from
@subject = subject
@body["message"] = message
end

this will send mail to all the contacts in the list..

Thats it..Now do marketing directly from ur website..

Dhaval Parikh
Software Engineer
Ruby on Rails
http://www.dhavalparikh.co.in

Saturday, June 14, 2008

Some Of RoR Resources

Here are some of the RoR resources from where u can get all the details you want regarding RoR You may add your sites via comments

  • Main Ruby Site - Official Ruby site. Find a complete list of all documentation, tutorials, news etc.

  • Ruby Documentation - Ruby documentation site.

  • Ruby Installation - One-Click Ruby Installer for Windows.

  • RubyForge - Open source project repository.

  • Ruby on Rails - Official site for Ruby on Rails.

  • RubyGems - Download link for RubyGem and other documentation.

  • Rails APIs - A comprehensive list of Rails APIs

  • Rails Conf - RailsConf, co-presented by Ruby Central, Inc. and O'Reilly Media, Inc., is the largest official conference dedicated to everything Rails.

  • Ruby Central - Ruby Central, Inc., is a 501(c)(3) tax-exempt organization, dedicated to Ruby support and advocacy.

  • MySQL Homepage - Here you can download the latest MySQL release, get the MySQL news update. The mailing list is also a great resources for anyone who want to build dynamic websites using MySQL.

Wednesday, June 4, 2008

Setting Up meta tags in RoR application For SEO


Meta tags are one of the important aspect for any site. And RoR having the power for clean urls setting up proper meta tags will really do wonders for the site.

So here is the method to setup the meta tags dynamically for all the pages

Here’s what I do (and it’s just one way of many) :

In my layout/application.rhtml
1

2
3
<%= @meta_title %> My Site Name>

"keywords" content="<%= @meta_keywords %>" />
"description" content="<%= @meta_description %>" />

In my application controller:

1

2
3
4
5
6
7
8
  before_filter :meta_defaults

private

def meta_defaults
@meta_title = "Welcome to"
@meta_keywords = "my keywords"
@meta_description = "my meta description"
end
and then in individual actions in my controllers I override the defaults
1

2
3
4
5
def view

@article = Article.find(params[:id])
@meta_title = "#{@article.name} - "
@meta_description = @article.short_description
end

There are many other ways to do it..If there is a better way that you have pls share ur views below.




Saturday, May 31, 2008

Rails Migration

Rails Migration allows you to use Ruby to define changes to your database schema, making it possible to use a version control system to keep things synchronised with the actual code.

This has many uses, including:

  • Teams of developers - if one person makes a schema change, the other developers just need to update, and run "rake migrate".

  • Production servers - run "rake migrate" when you roll out a new release to bring the database up to date as well.

  • Multiple machines - if you develop on both a desktop and a laptop, or in more than one location, migrations can help you keep them all synchronised.

What can Rails Migration do?

  • create_table(name, options)

  • drop_table(name)

  • rename_table(old_name, new_name)

  • add_column(table_name, column_name, type, options)

  • rename_column(table_name, column_name, new_column_name)

  • change_column(table_name, column_name, type, options)

  • remove_column(table_name, column_name)

  • add_index(table_name, column_name, index_type)

  • remove_index(table_name, column_name)

Migrations support all the basic data types: string, text, integer, float, datetime, timestamp, time, date, binary and boolean:

  • string - is for small data types such as a title.

  • text - is for longer pieces of textual data, such as the description.

  • integer - is for whole numbers.

  • float - is for decimals.

  • datetime and timestamp - store the date and time into a column.

  • date and time - store either the date only or time only.

  • binary - is for storing data such as images, audio, or movies.

  • boolean - is for storing true or false values.

Valid column options are:

  • limit ( :limit => “50” )

  • default (:default => “blah” )

  • null (:null => false implies NOT NULL)

NOTE: The activities done by Rails Migration can be done using any front end GUI or direct on SQL prompt but Rails Migration makes all those activities very easy.

See the Rails API for details on these.

Create the migrations:

Here is the generic syntax for creating a migration:

C:\ruby\application> ruby script/generate migration table_name

This will create the file db/migrate/001_table_name.rb. A migration file contains basic Ruby syntax that describes the data structure of a database table.

NOTE: Before running migration generator, its recommended to clean existing migrations generated by model generators.

We will create two migrations corresponding to our three tables books and subjects.

C:\ruby> cd library
C:\ruby\library> ruby script/generate migration books
C:\ruby\library> ruby script/generate migration subjects

Notice that you are using lower case for book and subject and using the plural form while creating migrations. This is a Rails paradigm that you should follow each time you create a Migration.

Edit the code to tell it what to do:

Go into db/migrate subdirectory of your application and edit each file one by one using any simple text editor.

Modify 001_books.rb as follows:

The ID column will be created automatically, so don't do it here as well.

class Books < ActiveRecord::Migration
def self.up
create_table :books do |t|
t.column :title, :string, :limit => 32, :null => false
t.column :price, :float
t.column :subject_id, :integer
t.column :description, :text
t.column :created_at, :timestamp
end
end

def self.down
drop_table :books
end
end

The method self.up is used when migrating to a new version, self.down is used to roll back any changes if needed. At this moment abobe script will be used to create books table.

Modify 002_subjects.rb as follows:

class Subjects < ActiveRecord::Migration
def self.up
create_table :subjects do |t|
t.column :name, :string
end
Subject.create :name => "Physics"
Subject.create :name => "Mathematics"
Subject.create :name => "Chemistry"
Subject.create :name => "Psychology"
Subject.create :name => "Geography"
end

def self.down
drop_table :subjects
end
end

Above script will be used to create subjects table and will create five records in the subjects table.

Run the migration:

Now that you have created the migration files, you can execute it against the database.To do this, go to a command prompt and go to the library directory, in which the application is located, and then type rake migrate.

C:\ruby\library> rake db:migrate

This will create a "schema_info" table if it doesn't exist which tracks the current version of the database - each new migration will be a new version, and any new migrations will be run until your database is at the current version.

Rake is a Ruby build program similar to the Unix make program that Rails takes advantage of to simplify the execution of complex tasks such as updating a database's structure etc.

Running migrations for production and test databases:

If you would like to specify what rails environment to use for the migration, use the RAILS_ENV shell variable.

For example:

C:\ruby\library> set RAILS_ENV=production
C:\ruby\library> rake db:migrate

C:\ruby\library> set RAILS_ENV=test
C:\ruby\library> rake db:migrate

C:\ruby\library> set RAILS_ENV=development
C:\ruby\library> rake db:migrate

NOTE: On Unix, use "export RAILS_ENV=production" instead of set.


source : - tutorialspoint