4 Simple Steps To Implement “Delayed Job” In Rails

Here in this article, I going to tell you the best way to implement “delayed job” in rails

“delayed_job” is a ruby gem used to execute tasks as a background process in Rails environment, increasing page rendering speed.

Delayed::Job (or DJ) allows you to move jobs into the background for asynchronous processing.

Why you need a background process and is it really that important!

Let’s consider a scenario where a mailing application needs to send emails to a huge list of recipients. In such cases it is obvious that the processing time is too long, annoying the users.

Here are some of key points to consider:

  • Incredibly quick & easy to get rolling
  • No addition to your “stack”, runs just fine with Active Record
  • Good choice for beginners while migrating code from foreground to the background

Hence, it’s only wise to move the long running tasks as a background process by using “delayed_job” gem.

Detailed steps to integrate delayed job in a Rails application

Step# 1

  • Add gem to the Gemfile
  • “delayed_job” supports multiple back-ends for storing the job queue
  • To use “delayed_job” with Active Record, use gem ‘delayed_job_active_record’
  • To use “delayed_job” with Mongoid, use gem ‘delayed_job_mongoid’

Example

/Gemfile.rb

  • gem ‘delayed_job_active_record’, ‘4.0.3’
  • Run “bundle install” to install the “delayed_job” gem

Step# 2

  • Generate the related file for the Job run
  • Generate related files required to run the background job by running the following command
    • rails g delayed_job:active_record

It adds following files to the application

  • A Script named “delayed_job” inside “/bin” folder to run the jobs which are in queue.
  • Migration file to create a table to store the job with other information such as priority, attempts, handler, last_error, run_at, locked_at, failed_at, locked_by, queue.

Run the migration file by using the following command

  • rails db:migrate

Set the queue_adapter in config/application.rb

  • config.active_job.queue_adapter = :delayed_job

If you are using the protected_attributes gem, it must appear before delayed_job in your gemfile. If your jobs are failing with:

  • Setup Delayed::Job config in an initializer (config/initializers/delayed_job_config.rb)
    • Delayed::Worker.destroy_failed_jobs = false
    • Delayed::Worker.sleep_delay = 60
    • Delayed::Worker.max_attempts = 3
    • Delayed::Worker.max_run_time = 5.minutes
    • Delayed::Worker.read_ahead = 10
    • Delayed::Worker.default_queue_name = ‘default’
    • Delayed::Worker.delay_jobs = !Rails.env.test?
    • Delayed::Worker.raise_signal_exceptions = :term
    • Delayed::Worker.logger = Logger.new(File.join(Rails.root, ‘log’, ‘delayed_job.log’))

Step# 3

  • Replace script/delayed_job with bin/delayed_job
  • Start up the jobs process

There are two ways to do this.

  • If application is in development mode, we would use the below rake task instead.
    • rake jobs:work
  • If application is in production mode, then it is preferred to use the “delayed_job” script. This demonizes the job process and allows multiple background processes to be spawned.

To use this, pursue the following steps

  • Add gem “daemons” to your Gemfile
  • Run bundle install
  • Make sure you’ve run rails generate delayed_job
  • If you want to just run all available jobs and exit you can use rake jobs:workoff
  • Work off queues by setting the QUEUE or QUEUES environment variable.
    • QUEUE=tracking rake jobs:work
    • QUEUES=mailers,tasks rake jobs:work

Step# 4

  • Add task to run in background
  • In Controller just call .delay.method(params) on any object and it will be processed in the background.

Example:

UsersController before adding to background job

[code language=”html”]
class UsersController < ApplicationController
def send_email
User.find_each(is_subscribed: true) do |user|
NewsMailer.newsletter_mail(user).deliver
flash[:notice] = "Mail delivered"
redirect_to root_path
end
end
end
[/code]

 
UsersController after adding to background job

[code language=”html”]
class UsersController < ApplicationController
def send_email
User.find_each(is_subscribed: true) do |user|
# add .delay method to add it to background process. In case of mail sending remove the .deliver method to make it work.
NewsMailer.delay.newsletter_mail(user)
flash[:notice] = "Mail delivered"
redirect_to root_path
end
end
end
[/code]

Advantages of implementing above steps:

  • No more waiting for a response, after clicking a link to do a big stuff.
  • Just call .delay.method(params) on any object and it processes in the background.
  • Job objects are serialized to yaml and stored in the delayed_jobs table, so they can be restored by the job runner later.
  • It automatically retries on failure. If a method throws an exception it’s caught and the method reruns later. The method retries up to 25 times at increasingly longer intervals until it passes.
  • “delayed_job” gem maintains log by creating a log file “/log/delayed_job.log”

I am sure this article will give you a clear idea about the way to implement “delayed job” in rails. You can share your thoughts with comments if I have missed anything or if you want to know more.

Do you work on or use Ruby on Rails? Let’s Discuss!

Ruby On Rails Releases Fixes For DoS, XSS Vulnerabilities

In 18th March, Ruby on Rails released four new versions along with fixes for a number of vulnerabilities, which could have lead to denial of service attacks and XSS injections. According to a post in company’s blog a total of 4 vulnerabilities were addressed in version 3.2.13, 3.1.12 and 2.3.18 of Rails. The company wrote “All versions are impacted by one or more of these security issues,”

The patches were released for symbol denial service (DoS) vulnerability (CVE-2013-1854) in ActiveRecord function and for two cross-sites scripting vulnerabilities i.e. sanitize helper (CVE-2013-1857) and sanitize_css method in Action Pack (CVE-2013-1855).

According to one of the warnings, an additional XML parsing vulnerability in JDOM backend of ActiveSupport could have also allowed attackers to perform denial of service attack when using JRuby (CVE-2013-1856) or could have enabled to gain access to files stored in the app server.

The XSS vulnerability could have allowed attackers to embed tag URL, which executes arbitrary JavaScript code.

The XSS vulnerabilities in particular could have allowed an attacker to embed a tag containing a URL that executes arbitrary JavaScript code.

Ruby on rails developer have fixed a number of similar issues in Ruby on Rails last month, which also included a YAML issue in ActiveRecord that lead to remote code execution

Apple Promises To Fix The Security Exploit That Lets People Gain Access

In our previous post we had outlined some of the latest features of iOS 6.1 update, mentioning it to be a fix for its old mistakes. But it turns out that, it does have some security flaws which let the users bypass the locked iPhone devices.

Never miss an update from us. Join 10,000+ marketers and leaders.

This exploit was first spotted by a French user who later uploaded a video to YouTube, by demonstrating the procedure to unlock a pass-code protected iOS device.  Seeing this Apple has promised to release a fast fix to this security issue. In a statement, the company said “Apple takes user security very seriously, we are aware of this issue, and will deliver a fix in a future software update.”  But the company has neither offered a specific timeline for its next update nor any quick fix to the handle issue.

The video depicts a sequence of steps in which the French guy easily hacks the “locked” iPhone, that was running iOS 6.1. The process involved is somewhat weird, such as ending an emergency call, consecutive pressing of home button and etc. Below I have provided the exact steps as posted by the users, to unlock the iPhone.

First Part:

  • Go to emergency call, push down the power button and tap cancel.
  • Dial 112 and tap green and immediately red.
  • Go to lock screen.

Second Part:

  • Go to passcode screen.
  • Keep pushing down the power button …1…2…3…seconds and before showing the slider “turn off”…tap the emergency call button and …voilá!
  • Then without releasing the power button press the home button and ready…”

The procedure allows the users to access contacts, photos and to make calls. But it doesn’t offer access to its home screen or any iOS apps that exists on the home screen. The iPhone lock screen hack seems to work on iPhone 4S, iPhone 4 too, if they are running iOS 6.1.

Top 7 Expert Tips And Tricks For IOS 6

iOS 6 is the latest Apple OS that runs on every Apple devices. Its features like friendly user interfaces and the convenience of apps, makes it a smarter operating system.  Perhaps you are an iOS guru. Or maybe a newbie to the operating system, but here we present some tweaks in iOS that you probably never knew. We also hope you love them and enjoy the benefit of this post.

  • Your iPhone Can Read To You:

You can enable the speak option for facilitating the iOS device to read aloud a selected text. You can enable it from the Accessibility option.

Never miss an update from us. Join 10,000+ marketers and leaders.

  • Enable Emoji Keyboard:

Add iconographic symbols in e-mails, messages, tweets and other postings. This feature is shipped with every iOS 6 devise and doesn’t require buying a third-party iPhone application. To get this feature select General, International then Keyboards tab from the settings option.

  • Ask Siri To Find Location By Using The ‘In Transit’ Cue:

You can ask Siri to find you an address by adding some extra word like ‘transit’ in the end of the command. For example “give me the direction to Kennedy International Airport via transit”. iOS will open up the maps apps and display the route.

  • Edit Siri Commands:

Sometimes Siri doesn’t understand your words and might interpret into something else. But you can fix this issue after Siri responds that she doesn’t understand what you’re talking about. Tap the speech bubble where Siri keeps a record of what she interpreted, there find your command, edit it and resubmit the request.

  • Limit The Ad Tracking:

Most users find it annoying to get constant Advertising pop-ups. But iOS allows you limit these accesses as well. Under the General option tap About and then Advertising to Limit the Ad tracking.

  • Take Photos While Shooting Video:

iPhone 5 and iOS 6 allows the users to snap photos and shoot video simultaneously. It appears on the screen in addition to the shutter button.

  • Customize Auto Replies For Rejected Calls:

you can tailor specific messages, explaining the situation why you didn’t answer your calls. By default you will get 3 pre-reserved options. However you can customize these pre-preserved messages too.

I’ve worked with the team at Andolasoft on multiple websites. They are professional, responsive, & easy to work with. I’ve had great experiences & would recommend their services to anyone.

Ruthie Miller, Sr. Mktg. Specialist

Salesforce, Houston, Texas

LEARN MORE

At Andolasoft, our iPhone application developers keep their skills updated with the latest technology and iOS releases to match this competitive market. Here we develop engaging iPhone application to meet our customer’s business requirements.

What Is The Key Points For Successful iOS Development?

After the introduction of iOS platform and the application development possibilities, it has paved new business opportunities for the IT industries as well as individual developers.

With the rapidly growing app industry it has become demanding to keep track of changing technology.

Here we have come up with some major key points which should be kept in mind by the developer at the time of iOS application development.

Never miss an update from us. Join 10,000+ marketers and leaders.

    1. Drive revenue for your business by integrating  ‘Geo-Targeted push Notification’, ‘Geo-Targeted Advertising’
    2. Integrate NFC (near field communication) system to your application.
    3. Use App analytics to monitor the app’s influence on the market. Target your audience and bring market specific features to you app.
    4. Avoid these flaws in your mobile app development
    5. Irrelevant push notification in the app
    6. Sending unnecessary “Rate my app” request to users
    7. Integrating Facebook and other social networking sites unnecessarily
    8. Avoid using full screen ads. Users hate this.
    9. Try to prefer building Native Apps for iPhones to web apps, because some web technologies are still not compatible with the iOS platform.
    10. Design intriguing UI to compel the user to use your app. Take inspiration from other successful Mobile application to generate similar experience for the users.
    11. iOS development supports numerous programming languages other than Objective-C, such as Ruby, JavaScript, Node.js etc. Choose the language you are comfortable with.
    12. Design your app so that it uses minimal battery power. Users are more concerned about the phone battery rather than the app itself.
    13. Develop cross-platform apps, so that it can be released for other mobile operating systems.
    14. Never build iPhone app that mimics the look and feel of other operating system.
    15. Never overdo the application animations and graphics.

I’ve worked with the team at Andolasoft on multiple websites. They are professional, responsive, & easy to work with. I’ve had great experiences & would recommend their services to anyone.

Ruthie Miller, Sr. Mktg. Specialist

Salesforce, Houston, Texas

LEARN MORE

iOS applications are the fastest evolving apps in the app industry.

That’s why at Andolasoft, our iPhone application developers keep their skills updated with the latest technology and latest iOS releases to match the competitive market.

Here we develop engaging iPhone application to meet our customer’s business requirements.

Awesome Project collaboration Tool to Manage Your Project and Team

When project development is in progress, practically each of the members may not meet face to face at a single workplace, neither the communication/documentation be available at the same location.

In order to overcome these hurdles, Andolasoft designed and developed a unique project collaboration tool called ‘Orangescrum’ with lots of facility and flexibility.

It is developed using CakePHP with very simple yet intuitive interfaces with easy-to-use functionalities which distinct it from other similar tools. It efficiently handles projects by maintaining effective communication among the project members with some brilliant features as discussed below

Orangescrum allows you to share files while assigning tasks to the developers for your projects. It is taken care of that the popular format (.doc, .docx, .xls, .html etc) are supported. This is extremely helpful for relating tasks with additional information in the form of documents.

  • Create and track all the task of a milestone from a single page. Milestones can be set as per the project deadline so that the stakeholders are alerted. Also tasks can be streamlined for each milestone and assigned them to concerned project members.
  • It uses a ticketing workflow to create a new task while addressing the issue. These tasks can then be assigned to specific team members in different phases. It facilitates to manage through various phases such as ‘NEW’, ‘WIP’, ‘START’ and ‘CLOSE’
  • It can also be used as a bug tracker or issue tracker. It includes filters and options to make issue tracking easier by assigning it to the concerned project members.
  • You can set email or mobile alerts to anyone involved in a project, which can be prioritized and targeted to concerned individuals. It also facilitates the receiver to reply directly from the web mail which is automatically updated in Orangescrum.
  • It includes the ‘Archive’ facility for safe storage of files and tasks. This feature helps to keep the files and task safe. These contents can later be retrieved at any time, unless it is removed permanently.

To know more about Orangescrum, please visit:  www.orangescrum.com