How to use Amazon S3 Bucket with Paperclip to store images in Rails3

Amazon_S3_Online_Service-resized200-150x150

“S3 Bucket” is Amazon Simple Storage Service – a “highly durable and available store” and can be used to reliably store graphical and other applications contents such as media files, static assets and user uploads. It allows you to off-load your entire storage infrastructure. This feature facilitates better scalability, reliability, and speed than just storing files on the file-system.

It is an online storage web service offered by Amazon Web Services and provides storage through web services interfaces (REST, SOAP etc.)

Here is an example on how to use Amazon S3 with paperclip in Ruby on Rails applications.

Step#1

  • In rails 3.x

Install aws-s3 gem by adding in Gemfile

gem 'aws-s3'

And run

Run “bundle install”

Step#2

To get AWS S3 bucket ‘Access Key ID’ and ‘Secret Access Key’ go to the “http://aws.amazon.com/s3”

Create s3.yml file under config directory and enter your Amazon S3 credentials

development:
bucket: bucket-dev-name
access_key_id: xxxxx
secret_access_key: xxxxx
test:
bucket: bucket-test-name
access_key_id: xxxxx
secret_access_key: xxxxx
production:
bucket: bucket-prod-name
access_key_id: xxxxx
secret_access_key: xxxxx

Step#3

Open your model file that would hold the attachment and modify it as follows

###Paperclip
has_attached_file :photo,:styles =>{ :thumb => "100x100", :medium => "200x200", :large => "600x400" },:storage => :s3,
:s3_credentials => "#{RAILS_ROOT}/config/s3.yml",:path => ":attachment/:id/:style.:extension",:bucket => 'yourbucket'

Step#4

In view, to display the image

Web Site and Server Monitoring with Nagios

Nagios since it’s inception in 1999 has become one of the most popular and open source monitoring system (under the free license GNU General Public License) to monitor IT infrastructure problems.

It alerts you about any critical problem that might occur in your infrastructure through e-mail, SMS and pager.

Installation and configuration of Nagios is comparatively simpler than other infrastructure monitoring tools.

Although numerous plugins are available in the internet to monitor different services and for graphing of the data, plugin can also be customized as per your requirement by using tools like shell scripts, C++, Perl, Ruby, Python, PHP, C#, etc. DuringNagios configuration you have to keep the following in mind.

  • Lines starting with ‘#’ character are considered as comments and are ignored while processing.
  • Inconfiguration lines the characters that appear after a semicolon (;) arealso treated as comments hence are not processed.
  • Directive names are case-sensitive.

To get data from the monitoring host’s you will need aNagios agent. Below are some popular Nagios Agents:

  • NRPE
  • NRDP
  • NSClient++

Below are some protocols used for monitoring:

  • SMTP
  • POP3
  • HTTP
  • NNTP
  • ICMP
  • SNMP
  • FTP
  • SSH

Below are some Host resources which can be monitored:

  • Processor load
  • Disk usage
  • System logs

How to add AJAX Pagination using jQuery in Rails3

Ruby_on_railsAjax pagination will do the same functionality of pagination without refreshing the page. It calls the action through jQuery to display the results per page.

This example demonstrates the implementation of ajax pagination in Rails3. However the same can be used with Rails2.3.x.

Remember to add jQuery to your paths.

Step#1

Add the following gem to your Gemfile

gem 'will_paginate'
Run bundle install

Step#2

Include the following code in the controller you want to paginate, For example, I have used Posts controller.

class PostsController < ApplicationController
  def index
    @posts = Post.paginate(page: params[:page], per_page: 10)
  end
end

Step#3

Add this in the view “posts/index.html.erb” file

<div id=”post_id”>
<%=render partial:’posts’%>
</div>

Encapsulate the order list in the partial view “posts/_posts.html.erb”

<ul>
<% @posts.each do |post|%>
<li>
<!-- Show post data -->
</li>
<% end %>
</ul>
<% = will_paginate(@posts,:id=>”ajax_paginate”)%>
 
<script>
 
$(document).ready(function() {
$(“#ajax_paginate”).find(“a”).each(function(){
var linkElement = $(this);
var paginationURL = linkElement.attr(“href”);
linkElement.attr({“url”:paginationURL, “href”: ”#”});
linkElement.click(function(){
$(“#post_id”).html(‘<div align= “center”><br/>
<img src=”/images/loader.gif”/></div>’)
$(“#post_id”).load($(this).attr(‘url’));
Return false;
});
});
});
 
</script>

The last line “”ajax_paginate”) %>” will generate your pagination links

Voila, You are done!

Usage of PDFKit with Rails 3.2.8 and Ruby 1.9.3

PDFkit is a powerful library which generates PDF from HTML + CSS. It uses “wkhtmltopdf” on the back-end which renders HTML using Webkit. Here is a simple example which describes the installation of “wkhtmltopdf” and usages of pdfkit. I have used rails 3.2.8 and ruby 1.9.3 as my environment.

Step-1:

Install the “wkhtmltopdf” library

Download the “wkhtmltopdf” library from the link
http://code.google.com/p/wkhtmltopdf/

Windows

  • Download the exe file and install it.
  • Remember the installation path

Linux

  • Download the binary for your architecture at the http://code.google.com/p/wkhtmltopdf/downloads/list
  • Extract the file to a directory that is in your PATH, such as /opt or /usr/local/bin and run from there.

For Debian/Ubuntu use the following command:

apt-get install wkhtmltopdf

Step-2: Installing PDFKit

In your bundle file write

gem 'pdfkit'

Then install

bundle install

Step-3: Configuration of PDFKit

Create a new file “pdfkit.rb” in “config/initializers/” path and write the following

If you are in windows then you need to give the path to the exe file generated after installation. If you are in linux and the path is set as the default path then you don’t need to give the path.

PDFKit.configure do |config|
config.wkhtmltopdf = 'C:Program Fileswkhtmltopdfwkhtmltopdf .exe'
config.default_options = {
:page_size => 'Legal',
:print_media_type => true
}
# config.root_url = "http://localhost" # Use only if your external hostname is unavailable on the server.
end

Step-4: Middleware Setup

Write the following in the “config/application.rb

require 'pdfkit'
 
config.middleware.use PDFKit::Middleware
config.threadsafe!

Step-5: Usages

Creating PDF in a file path

Now to generate the pdf file by writing down the following codes on one of your controller actions

kit = PDFKit.new"<h1>Hello</h1><p>This is PDF!!!</p>"
file_path = your_file_path
pdf = kit.to_file file_path

Now you can find the PDF file being generated on the file path.

Displaying PDF on browser

<p id="pdf_link"><%= link_to "Download Invoice (PDF)", order_path(@order, :format => "pdf") %></p>

Your PDF will be displayed on the browser.

You can also add “.pdf” to any of our application’s URLs to get a PDF version of that page.

Implementing Sortable Columns in Rails through Helper

Use of a sortable column in a listing view. For an example there is a list of “Programs”

Step# 1

  • Here our controller is named as “Programs” and the model is named as “Program”
  • Add the following helper methods to the controller
class ProgramsController < ApplicationController
helper_method :sort_column, :sort_direction
protected
def sort_column
Program.column_names.include?(params[:sort]) ? params[:sort] : "position"
end
def sort_direction
%w[asc desc].include?(params[:direction]) ? params[:direction] : "asc"
end
def your_custom_action
end
end

Step# 2

  • In Helper class of “Program” add the following codes
module ProgramsHelper
def sortable(column, title = nil)
title ||= column.titleize
active = column == sort_column
ascending = active && sort_direction == 'asc'
direction_html = ascending ? ' ▲ ' : ' ▼ ' if active
css_class = active ? "current #{sort_direction}" : nil
direction = ascending ? "desc" : "asc"
link_to(title, { :sort => column, :direction => direction }, :remote => true, :class => css_class) << raw(direction_html)
end
end

 

Step# 3

  • In the view (index.html.slim) file add the helper method “sortable” in the columns you want to sort
  • Please note: Here slim is used for the view pages
#main
table style="text-align:left;"
tr
th align="left" = sortable "name"
th align="left" = sortable "created_at", "Added"
th align="left" = sortable "subscription_level_id", "Subscription"
th align="left" = sortable "rating_average", "Rating"
- programs.each do |program|
= content_tag_for :tr, program, 'row_for' do
td= link_to program.name, program_url(program)
td.attribute= program.created_at.strftime("%B %Y")
td.attribute= program.subscription_level.name.capitalize if program.subscription_level
td.attribute= ratings_for program
.pagination_container style="padding-bottom:20px;"
= will_paginate programs

KurrentJobs.com – A Better Choice for Technical Recruiters

The Start-up trend is rising in the webosphere. Inspired from companies like Facebook, Foursquare and Instagram, many people are willing to implement their ideas as start-ups. As your start-up company grows you need right people to do your jobs and that’s what most of the recruiters are tired about. There are many information technology job portals on the web featuring start-up jobs, but they still got hung around with some loop holes. We had gone through some start-up job posting sites in the past few months and found that:

Most of the job sites-

  •     Ask for registration by filling out long forms, we bet, you shy away from this!
  •     Limited to major countries (like UK, USA etc.)
  •     Confused over jobs, news, companies and widgets
  •     Limited or no free job posting allowed (some charges between 99 to 400 USD per job)
  •     Don’t come up with job types
  •     Don’t support social login with Facebook or Twitter
  •     Somewhat biased to either employers or candidates

KurrentJobs.com runs where others can’t walk

Yes! After finding these we developed KurrentJobs.com, a technical job board where we tried to mend all the loop holes. KurrentJobs.com is an ideal free job posting site for technical recruiters and this doesn’t mean we forgot the applicants. See how KurrentJobs.com can help both Recruiters and Applicants,

Facebook Login Support: Clients no more have to go through filling up forms for registration. Just login through your Facebook account and start posting jobs.

Easy Job Posting: We bet you can complete your job posting in less than sixty seconds, which would be taking 2-3 minutes in other websites.

What’s Your Job Type: You can post job types as per your requirements among Full-time, Freelance, Internship and Contractual. Its actually beneficial for both employer and applicants.

Apply through LinkedIn:Applicants feel the same about form filling as the recruiters. So we allow applicants to apply for jobs by logging into their LinkedIn profile.

Lightweight ATS:We’ve made the application tracking system simple in kurentJobs.com.

With all of these features and more, KurrentJobs.com is surely a better choice for start-up jobs and companies. So do you think it can help you too. Why not give it a try?

Try the demo at KurrentJobs.com and find out yourself.