upload images to AWS::S3 in ruby using aws sdk gem

Using gem aws-sdk for a ROR application for uploading images to s3
Uploading images to a fixed bucket with different folders for each object or application. The s3 keeps a limitation on the number of buckets creation whereas there is no limitation for content inside a bucket. This code will upload image for a user to s3 using aws-sdk gem. The bucket and the image uploaded are made public, so that the images uploaded are directly accessible. The input is takes is the image complete path where it is present, folder in which it should be uploaded and user_id for whom it should be uploaded.
def save_screenshot_to_s3(image_location, folder_name,user_id) service = AWS::S3.new(:access_key_id => ACCESS_KEY_ID, :secret_access_key => SECRET_ACCESS_KEY) bucket_name = "app-images" if(service.buckets.include?(bucket_name)) bucket = service.buckets[bucket_name] else bucket = service.buckets.create(bucket_name) end bucket.acl = :public_read key = folder_name.to_s + "/" + File.basename(image_location) s3_file = service.buckets[bucket_name].objects[key].write(:file => image_location) s3_file.acl = :public_read user = User.where(id: user_id).first user.image = s3_file.public_url.to_s user.save end

MongoDB query optimisation

 Before you read below, make sure MongoDB is the right choice for your application. It's Nonrelational and Document oriented database.

Mongoid::Criteria Let's say you query all user data, @users = User.all while using mongoid. So when you access @users in views, it's Mongoid::Criteria and
ruby methods will not work ex- to_json. When we iterate over @users, say

@users.each do |user| 
  p user

For each user entry, query is fired which could easily be avoided by changing the query to @users = User.all.entries or @users = User.all.to_a. Also for single object @user = User.where(email: "bijendra.biju@gmail.com").first.

Index your database: use the specific fields while indexing which will fasten the search. Indexes improve the efficiency of read operations by reducing the amount of data that query operations need to process.
Apart from read operations indexes can support sort operation and allow for a more efficient storage utilization.

For ex: If you need to implement search over user database, index the specific fields which will be used for searching. By default _id will be created and indexed,

class User
  include Mongoid::Document
  field :name, :type => String
  field :email, :type => String
  index({ email: 1 })


RubyConf 2013 at pune..retrieved from drafts

A great experience while interacting with the ruby community from different places. Lots of knowledge and inspiration flows. Met many folks from india and abroad.

Fresh server start after instance degraded

So the issue was, amazon issued an warning regarding the server to be terminated, before i could think of making an backup the instance stopped.

The troubleshoot operations like reboot, stop and start didn't worked.
Simple Steps to start a fresh instance with the previous content on server.


When you try to ssh into a instance and it failed giving errors which says remote host identification changed, possibly you have tried to ssh into that earlier but either it's been mapped to a IP or dns name has been assigned to that instance.you can resolve this issue ..

Cannot allocate memory error while computing files - Setup Swap space

ActionView::Template::Error (Cannot allocate memory - nodejs /tmp/execjs20131021-26716-fckzo3.js 2>&1
Nodejs is used to compile javascript at runtime. In RoR applications, this error comes when server is started in production mode which compiles the assets or while running rake assets:precompile.
check for swap space and allocate

Uninstalling mysql from ubuntu 12.04 + higher

Using the steps below you can uninstall mysql from ubuntu,
Started with this
sudo apt-get remove --purge mysql-client mysql-server