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
Friday, July 4, 2008
Open SSL with Rails
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.rhtml1 |
|
In my application controller:
1 | before_filter :meta_defaults |
1 | def view |
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 |
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 |
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 |
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> set RAILS_ENV=test |
C:\ruby\library> set RAILS_ENV=development |
NOTE: On Unix, use "export RAILS_ENV=production" instead of set.
source : - tutorialspoint
Saturday, April 26, 2008
Ruby Gems
A gem is a packaged Ruby application or library. It has a name and a version and have a specific task. Based on your requirement you may embed them into your application codes.
For eg.
activerecord 0.8.4
BlueCloth 0.0.4
captcha 1.1.2
cardinal 0.0.4
progressbar 0.0.3
rake 0.4.0
Gems are managed on your computer using the gem command. You can install, remove, and query gem packages using the gem command.
Installing RubyGems:
RubyGems is the name of the project that developed the gem packaging system and the gem command. You can get RubyGems from the RubyForge repository http://rubyforge.org/frs/?group_id=126
then type
ruby setup.rb
It installs the required library files and the gem command. This command gives us the power to do many things.
In a shortcut version at CLI we may use
q for query
r for remote
l for local
n for name
spec for specification
Listing remotely installable gems
gem query –remote
Searching remotely installable gems
gem query –remote –name-matches doom
# shortcut: gem q -R -n doom
Installing a remote gem
gem install –remote progressbar
or
gem ins -r progressbar-0.0.3
or
gem ins -r progressbar –version ‘> 0.0.1′
RubyGems allows you to have multiple versions of a library installed and choose in your code which version you wish to use.
Looking at an installed gem
gem specification progressbar
Listing all installed gems
gem query –local
remote or local
If you don’t specify either of these, then gem will (usually) try ’’both’’ a local and remote operation. For example:
gem ins rake # Attempt local installation; go remote if necessary
gem list -b ^C # List all local AND remote gems beginning with “C”
Coding With RubyGems
require ‘rubygems’
require ‘progressbar’
and then subsequently
bar = ProgressBar.new(”Example progress”, 50)
The first line of the program requires the progressbar library file. RubyGems will look for the progressbar.rb file in the standard library locations. If not found, it will look through its gem repository for a gem that contains progressbar.rb. If a gem is used, RubyGems attempts to use the latest installed version by default.
Specifying Versions
gem install –remote rake –version “0.4.14″
Updating RubyGems
gem update –system
or
gem install rubygems-update
update_rubygems
Uninstalling a gem
gem uninstall progressbar
Info extracted from : http://rubyforge.org/
exception handling in ruby
>begin expression executes its body and returns the value of the last evaluated expression.
>Any error in begin part will be caught by rescue depending upon parameters
>ensure is the one which must be exectued irrespective of exception occured or not
>An error message caught by an exception can be accessed using $!
For Java Programmers [ begin => try ; rescue => catch; ensure => finally]
begin
p "I am doing well"
p "so well .. and well"
a = 8/0
rescue
p "Something went wrong => " + $!
ensure
p "Oh Somehow I could finish my work"
end
O/P:
“I am doing well”
“so well .. and well”
“Something went wrong => divided by 0″
“Oh Somehow I could finish my work”
a = 8
b = 0
begin
p "I am doing well"
p "so well .. and well"
if a==18
p "I am happy with a as 8"
elsif b == 0
p "Lets say I dont want this"
raise Exception
else
raise
end
rescue
p "Exception 1 caught here " + $!
rescue Exception
p "Exception 2 caught here " +$!
ensure
p "Oh Somehow I could finish my work"
end
O/P for [[ a = 8 and b = 0 ]]
“I am doing well”
“so well .. and well”
“Lets say I dont want this”
“Exception 2 caught here Exception”
“Oh Somehow I could finish my work”
O/P for [[ a = 8 and b = 1 ]]
“I am doing well”
“so well .. and well”
“Exception 1 caught here “
“Oh Somehow I could finish my work”
Wednesday, March 26, 2008
Validating Email Addresses with Ruby
After my post on how to send email thru action mailer I thought of writing how to validate that email address and thought it would be useful for all.
Here it goes
In any application in which a user enters an email address, there is the very real possibility that the user will make a typo and your application will end up with an invalid address. You can have them enter it twice, but this seems clunky. And you can, of course, send an email with an activation link, which provides the only true validation, but there’s no need to bother sending the email if you know the address is no good. Furthermore, once you’re past the page where the user enters their email address, you’ve missed your chance to tell them there’s something wrong and they should correct it.
So you really should do what you can to validate the address when the user enters it. I recently made a simple addition to my applications that helps a lot: verify that the domain name is valid.
It’s surprisingly easy to do—especially with a little help from Peter Cooper’s excellent Beginning Ruby, which has a very useful chapter on network programming. The following code is adapted from his examples:
require 'resolv'
def validate_email_domain(email)
domain = email.match(/\@(.+)/)[1]
Resolv::DNS.open do |dns|
@mx = dns.getresources(domain, Resolv::DNS::Resource::IN::MX)
end
@mx.size > 0 ? true : false
end
This example makes use of the Ruby standard library “resolv”, so you need to require it first.
The first step is to separate the domain name from the rest of the email address. The regular expression captures the part of the string that follows the @ symbol.
Then the code creates a new DNS resolver object and queries the resolver for an MX (mail exchanger) resource at the specified domain. This returns an array, which will be empty if there is no MX record for the domain.
(Note: In a previous version of this article, I used Resolv.getaddress to see if there is a DNS entry for the domain, instead of checking for an MX record. This approach works most of the time, but it rejects any domain for which there is no A record. If a domain is used only for email and not for a web server, there might not be an A record. Also, some domains have an A record only for www.domain.com, which will also fail the simple getaddress test.)
You can use something like the following in the validate method within the appropriate model:
unless email.blank?
unless email =~ /^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/
errors.add(:email, "Your email address does not appear to be valid")
else
errors.add(:email, "Your email domain name appears to be incorrect") unless validate_email_domain(email)
end
end
I first check to make sure the email address is not blank, because that’s detected by a simple validates_presence_of :email statement that produces a different error message.
Then I make sure that the email address is at least syntactically reasonable, with a rather ugly regular expression, before bothering to check the DNS.
It should be noted that the regex I use here isn’t designed to cover all of the RFC2822 cases, nor with other RFC drafts dealing with non-ASCII addressing.
An even better approach would be to use an observer to validate the address with an Ajax call before the user submits the form.
It is possible to take this a step further by sending the SMTP server referenced in the MX record a “RCPT TO:” command. In theory, this would check that the user name is valid as well as the domain name. This takes additional time, however, and I’ve read that the response from mail servers is often not reliable. If anyone has tried this, I’d appreciate any feedback on how well it worked.
Thursday, March 6, 2008
Actionmailer
Action Mailer is the Rails component that enables applications to send and receive e-mail. In this chapter we will see how to send an email using Rails. So lets start with creating a emails project using following command.
C:\ruby\> rails emails
This will create required framework to proceed. Now we will start with configuring Action Mailer.
Action Mailer - Configuration
Following are the steps you have to follow to complete your configruation before proceeding with actual work:
Go into config folder of your emails project and open environment.rb file and add the following line at the bottom of this file.
ActionMailer::Base.delivery_method = :smtp
This tells ActionMailer that you want to user SMTP server. You can also set it to be :sendmail if you are using a Unix-based operating system such as Mac OS X or Linux.
Add the following lines of code to the bottom of your environment.rb as well.
ActionMailer::Base.server_settings = {
:address => "smtp.dhavalparikh.co.in",
:port => 25,
:domain => "dhavalparikh.co.in",
:authentication => :login,
:user_name => "username",
:password => "password",
}
The values given in double quotes will be different for your SMTP server. You can take this information from your Inernet Service Provider if you already don't know. You don't need to change port number 25 and authentication type if you ar eusing standard SMTP server.
Next step will be to create a mailer
Generate a mailer:
Use the following command to generate a mailer as follows:
C:\ruby\> cd emails
C:\ruby\emails> ruby script/generate mailer Emailer
This will create a file emailer.rb in app\models directory. Check the content of this file is as follows:
class Emailer > ActionMailer::Base
end
Let's create one method as follows.
class Emailer > ActionMailer::Base
def contact(recipient, subject, message, sent_at = Time.now)
@subject = subject
@recipients = recipient
@from = 'no-reply@yourdomain.com'
@sent_on = sent_at
@body["title"] = 'This is title'
@body["email"] = 'sender@yourdomain.com'
@body["message"] = message
@headers = {}
end
end
The contact method has four parameters a recipient, subject, message and a sent_at, which defines when the e-mail is sent. The method also defines six standard parameters that are a part of every ActionMailer method:
@subject defines the e-mail subject.
@body is a Ruby hash that contains values with which you can populate the mail template. You created three key-value pairs: title, email, and message
@recipients is a list of the people to whom the message is being sent.
@from defines who the e-mail is from.
@sent_on takes the sent_at parameter and sets the timestamp of the e-mail.
@headers is another hash that enables you to modify the e-mail headers. For example, you can set the MIME type of the e-mail if you want to send either plain text or HTML e-mail.
Now we will create a mailer template which is just text with standard Rails placeholders scattered throughout.
Put following code in app/views/contact.rhtml file
Hi!
You are having one email message from with a tilte
and following is the message:
Thanks
Next we will create a controller for this application as follows:
C:\ruby\emails> ruby script/generate controller Emailer
Now lets define a controller method in emailer_controller.rb which will call Model method to send actual email as follows:
class EmailerController < email =" @params[" recipient =" email[" subject =" email[" message =" email[" text =""> 'Message sent successfully'
end
end
To deliver e-mail using the mailer.s contact method, you have to add deliver_ to the beginningof the method name. You add a return if request.xhr? line so that you can escape to Rails Java Scripr (RJS) if the browser does not support JavaScript and then tell the method to render a text message.
You are almost done except to prepare a screen from where you will get user information to send email. So lets define one screen method index in controller and corresponding view:
Add following code in emailer_controller.rb file
def index
render :file => 'app\views\emailer\index.rhtml'
end
Now let's define our view in app\views\emails\index.rhtml
Send Email
bracket bracket %= text_field 'email', 'subject' %bracket bracket /pbracket
bracket pbracket bracket label for="email_recipient"bracket Recipientbracket /labelbracket :
bracket %= text_field 'email', 'recipient' %bracket bracket /pbracket
bracket pbracket bracket label for="email_message"bracket Messagebracket /labelbracket
bracket %= text_area 'email', 'message' %bracket bracket /pbracket
Now test your application by using http://127.0.0.1:3000/Emailer/index. This displays following screen and by using this screen now you will be able to send your message to anybody.
This will send your message and will display text message that "Message sent successfully"
Tuesday, February 26, 2008
Rmagick installation on Ubuntu
Rmagick installation on Ubuntu
I have seen many times that people are facing a lot of problem in installing RMagick and Image Magick on ubuntu.......The same problem was faced by me and i got it solve by following the steps given below
Download RMagick and Imagemagick..
put RMagick in the vendors folder where u want it to run from and Image Magick on Desktop
Go to the Path where Image Magick is stored and follow the steps
1) ./configure
2) make
3) make install
if you get an error while doing this task
type the following command in terminal
apt-get install build-essential (make sure that ruby dev is installed)
once you have done this follow the above 3 steps and things should start working
So thats all about ImageMagick
now come RMagick installation
move the the RMagick installation path and follow the steps
1) ./configure
Thats it..now things should work..
I dont think u will get any error. If you get any post ur errors as comment and get it solved..
Setting up ImageMagick & rmagick on Redhat
- sudo yum install libjpeg-devel libpng-devel glib2-devel fontconfig-devel zlib-devel libwmf-devel freetype-devel libtiff-devel
- wget ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick-6.3.2-9.tar.gz
- tar zxzvf ImageMagick-6.3.2-9.tar.gz
- cd ImageMagick-6.3.2-9
- ./configure
- make
- sudo make install
- sudo gem install rmagick