From c28d7d59b6da198952052b3ada33759cc9794535 Mon Sep 17 00:00:00 2001 From: "Matthew K. Fu JuYuan" Date: Fri, 13 Apr 2012 12:10:47 +0800 Subject: [PATCH] starting Resque --- Gemfile | 2 ++ Gemfile.lock | 18 ++++++++++++++ app/jobs/fetch_time.rb | 11 +++++++++ app/mailer/cron_mail.rb | 8 ++++++ config/environments/development.rb | 22 ++++++++--------- config/initializers/resque.rb | 15 ++++++++++++ config/resque.yml | 2 ++ config/resque_schedule.yml | 6 +++++ config/routes.rb | 1 + lib/tasks/anc_tasks.rake | 1 + lib/tasks/resque.rake | 39 ++++++++++++++++++++++++++++++ 11 files changed, 114 insertions(+), 11 deletions(-) create mode 100644 app/jobs/fetch_time.rb create mode 100644 app/mailer/cron_mail.rb create mode 100644 config/initializers/resque.rb create mode 100644 config/resque.yml create mode 100644 config/resque_schedule.yml create mode 100644 lib/tasks/resque.rake diff --git a/Gemfile b/Gemfile index d1afdb8cc..a6b96ff23 100644 --- a/Gemfile +++ b/Gemfile @@ -19,6 +19,8 @@ gem "mongo_session_store-rails3" gem 'nokogiri' gem 'radius' gem 'rake' +gem 'resque-scheduler', :require => 'resque_scheduler' +gem 'resque', :require => "resque/server" gem 'ruby-debug19' gem 'rubyzip' gem 'sinatra' diff --git a/Gemfile.lock b/Gemfile.lock index 71742974a..80ce363c4 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -153,6 +153,18 @@ GEM rake (0.9.2.2) rdoc (3.12) json (~> 1.4) + redis (2.2.2) + redis-namespace (1.0.3) + redis (< 3.0.0) + resque (1.20.0) + multi_json (~> 1.0) + redis-namespace (~> 1.0.2) + sinatra (>= 0.9.2) + vegas (~> 0.1.2) + resque-scheduler (1.9.9) + redis (>= 2.0.1) + resque (>= 1.8.0) + rufus-scheduler rspec (2.8.0) rspec-core (~> 2.8.0) rspec-expectations (~> 2.8.0) @@ -182,6 +194,8 @@ GEM ruby_parser (2.3.1) sexp_processor (~> 3.0) rubyzip (0.9.6.1) + rufus-scheduler (2.0.16) + tzinfo (>= 0.3.23) ruport (1.6.3) fastercsv pdf-writer (= 1.1.8) @@ -222,6 +236,8 @@ GEM uglifier (1.2.3) execjs (>= 0.3.0) multi_json (>= 1.0.2) + vegas (0.1.11) + rack (>= 1.0.0) warden (1.1.1) rack (>= 1.0) watchr (0.7) @@ -259,6 +275,8 @@ DEPENDENCIES radius rails (>= 3.1.0, < 3.2.0) rake + resque + resque-scheduler rspec (~> 2.0) rspec-rails (~> 2.0) ruby-debug19 diff --git a/app/jobs/fetch_time.rb b/app/jobs/fetch_time.rb new file mode 100644 index 000000000..70e58b2b2 --- /dev/null +++ b/app/jobs/fetch_time.rb @@ -0,0 +1,11 @@ +require 'open-uri' +require 'nokogiri' +module FetchTime + @queue = :fetch_time + + def self.perform() + sleep 10 + doc = Nokogiri::HTML(open('http://www.timeanddate.com/worldclock/city.html?n=241')) + CronMail.time_check(doc.at('#ct').children.first.text).deliver + end +end diff --git a/app/mailer/cron_mail.rb b/app/mailer/cron_mail.rb new file mode 100644 index 000000000..8a4c97009 --- /dev/null +++ b/app/mailer/cron_mail.rb @@ -0,0 +1,8 @@ +class CronMail < ActionMailer::Base + default :from => "orbit_test@rulingcom.com" + + def time_check(msg) + #attachments["rails.png"] = File.read("#{Rails.root}/public/images/rails.png") + mail(:to => "Matt ", :subject => msg) + end +end \ No newline at end of file diff --git a/config/environments/development.rb b/config/environments/development.rb index 1dbff0320..20f4519b4 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -29,16 +29,16 @@ Orbit::Application.configure do # :sender_address => %{"notifier" }, # :exception_recipients => %w{chris@rulingcom.com} - # config.action_mailer.delivery_method = :smtp - # config.action_mailer.smtp_settings = { - # :tls => true, - # :enable_starttls_auto => true, - # :address => "smtp.gmail.com", - # :port => '587', - # :domain => "smtp.gmail.com", - # :authentication => "plain", - # :user_name => "redmine@rulingcom.com", - # :password => "rulingredmine" } - + config.action_mailer.delivery_method = :smtp + config.action_mailer.smtp_settings = { + :tls => true, + :enable_starttls_auto => true, + :address => "smtp.gmail.com", + :port => '587', + :domain => "smtp.gmail.com", + :authentication => "plain", + :user_name => "redmine@rulingcom.com", + :password => "rulingredmine" } + end diff --git a/config/initializers/resque.rb b/config/initializers/resque.rb new file mode 100644 index 000000000..69eabc9cf --- /dev/null +++ b/config/initializers/resque.rb @@ -0,0 +1,15 @@ +require 'resque_scheduler' +require 'resque_scheduler/server' +require 'yaml' + +rails_root = ENV['RAILS_ROOT'] || File.dirname(__FILE__) + '/../..' +rails_env = ENV['RAILS_ENV'] || 'development' + +resque_config = YAML.load_file(rails_root + '/config/resque.yml') +Resque.redis = resque_config[rails_env] + +Resque.schedule = YAML.load_file("#{Rails.root}/config/resque_schedule.yml") +Dir["#{Rails.root}/app/jobs/*.rb"].each { |file| require file } + +# current_path = Rails.root.to_s.gsub(/\s/,'\ ') +# queues = [:test] diff --git a/config/resque.yml b/config/resque.yml new file mode 100644 index 000000000..f874633c8 --- /dev/null +++ b/config/resque.yml @@ -0,0 +1,2 @@ +development: localhost:6379 +production: localhost:6379 diff --git a/config/resque_schedule.yml b/config/resque_schedule.yml new file mode 100644 index 000000000..08b1b7ea0 --- /dev/null +++ b/config/resque_schedule.yml @@ -0,0 +1,6 @@ +time_to_talk_a_rest: + cron: "*/5 * * * *" + class: FetchTime + queue: daemons + rails_env: development + description: Send Email for Remind Time diff --git a/config/routes.rb b/config/routes.rb index 1b98bcc25..627738d33 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -12,6 +12,7 @@ Orbit::Application.routes.draw do # routes for admin namespace :admin do + mount Resque::Server.new, :at => "/resque" resources :assets resources :app_auths resources :object_auths do diff --git a/lib/tasks/anc_tasks.rake b/lib/tasks/anc_tasks.rake index cd534b939..a97e1830e 100644 --- a/lib/tasks/anc_tasks.rake +++ b/lib/tasks/anc_tasks.rake @@ -1,3 +1,4 @@ +require 'resque_scheduler/tasks' # encoding: utf-8 namespace :anc do diff --git a/lib/tasks/resque.rake b/lib/tasks/resque.rake new file mode 100644 index 000000000..66841c724 --- /dev/null +++ b/lib/tasks/resque.rake @@ -0,0 +1,39 @@ +# require "resque/tasks" +# require 'resque/scheduler' +# require 'resque/scheduler' + +# +# task "resque:setup" => :environment +# Resque tasks +require 'resque/tasks' +require 'resque_scheduler/tasks' + +namespace :resque do + task :setup => :environment do + require 'resque' + require 'resque_scheduler' + require 'resque/scheduler' + + # you probably already have this somewhere + Resque.redis = 'localhost:6379' + + # If you want to be able to dynamically change the schedule, + # uncomment this line. A dynamic schedule can be updated via the + # Resque::Scheduler.set_schedule (and remove_schedule) methods. + # When dynamic is set to true, the scheduler process looks for + # schedule changes and applies them on the fly. + # Note: This feature is only available in >=2.0.0. + #Resque::Scheduler.dynamic = true + + # The schedule doesn't need to be stored in a YAML, it just needs to + # be a hash. YAML is usually the easiest. + Resque.schedule = YAML.load_file('config/resque_schedule.yml') + + # If your schedule already has +queue+ set for each job, you don't + # need to require your jobs. This can be an advantage since it's + # less code that resque-scheduler needs to know about. But in a small + # project, it's usually easier to just include you job classes here. + # So, someting like this: + #require 'jobs' + end +end \ No newline at end of file