README.markdown in simple_worker-2.0.0.beta.16 vs README.markdown in simple_worker-2.0.0.beta.17
- old
+ new
@@ -18,334 +18,55 @@
SimpleWorker.configure do |config|
config.token = TOKEN
config.project_id = MY_PROJECT_ID
end
-
-Generate a Worker with Rails
-----------------------------
-If you're rolling on Rails, use the following:
- rails generate simple_worker worker_class_in_underscore_format
-
-This will set you up with a worker in ```app/workers```
-However, this is not autorequired, so a line similar to this will be required in your initializer:
-
- Dir.glob("#{Rails.root}/app/workers/*.rb").each{|w| require w}
-
-This one-liner requires all ```.rb``` files in ```app/workers```
-
Write a Worker
--------------
Here's an example worker that sends an email:
require 'simple_worker'
- class EmailWorker < SimpleWorker::Base
+ class HelloWorker < SimpleWorker::Base
- attr_accessor :to, :subject, :body
+ attr_accessor :name
# This is the method that will be run
def run
- send_email(:to=>to, :subject=>subject, :body=>body)
+ puts "Hello #{name}!"
end
-
- def send_email
- # Put sending code here
- end
end
Test It Locally
---------------
Let's say someone does something in your app and you want to send an email about it.
- worker = EmailWorker.new
- worker.to = current_user.email
- worker.subject = "Here is your mail!"
- worker.body = "This is the body"
+ worker = HelloWorker.new
+ worker.name = "Travis"
worker.run_local
Once you've got it working locally, the next step is to run it on the SimpleWorker cloud.
Queue up your Worker on the SimpleWorker Cloud
----------------------------------------------
Let's say someone does something in your app and you want to send an email about it.
- worker = EmailWorker.new
- worker.to = current_user.email
- worker.subject = "Here is your mail!"
- worker.body = "This is the body"
+ worker = HelloWorker.new
+ worker.name = "Travis"
worker.queue
This will send it off to the SimpleWorker cloud.
-To queue worker without uploading you could try to do following:
+Full Documentation
+-----------------
- data[:attr_encoded] = Base64.encode64({'@to'=>'example@email.com'}.to_json)
- data[:sw_config] = SimpleWorker.config.get_atts_to_send
- SimpleWorker.service.queue('EmailWorker', data)
+Now that you've got your first worker running, be sure to [check out the full documentation](http://docs.simpleworker.com).
+SimpleWorker can do so much more!
-
-
-Setting Priority
-----------------------------------------------
-
-Simply define the priority in your queue command.
-
- worker.queue(:priority=>1)
-
-Default priority is 0 and we currently support priority 0, 1, 2. See [pricing page](http://www.simpleworker.com/pricing)
-for more information on priorites.
-
-
-Schedule your Worker
---------------------
-
-There are two scenarios here, one is the scenario where you want something to happen due to a user
-action in your application. This is almost the same as queuing your worker.
-
- worker = EmailWorker.new
- worker.to = current_user.email
- worker.subject = "Here is your mail!"
- worker.body = "This is the body"
- worker.schedule(:start_at=>1.hours.since)
-
-By default, if you call `schedule` more than once for the same worker class, the new schedule will replace the old one. If you'd
-like multiple schedules for the same class, provide a `:name` parameter:
-
- worker.schedule(:name=>"EmailWorkerDaily", :start_at=>......)
-
-You can also set priority for scheduled jobs:
-
- worker.schedule(:priority=>1, ....)
-
-
-Check Status
-------------
-
-If you still have access to the worker object, just call:
-
- worker.status
-
-If you only have the job ID, call:
-
- SimpleWorker.service.status(job_id)
-
-This will return a hash like:
-
- {"task_id"=>"ece460ce-12d8-11e0-8e15-12313b0440c6",
- "status"=>"running",
- "msg"=>nil,
- "start_time"=>"2010-12-28T23:19:36+00:00",
- "end_time"=>nil,
- "duration"=>nil,
- "progress"=>{"percent"=>25}}
-
-There is also a convenience method `worker.wait_until_complete` that will wait until the status returned is completed or error.
-
-Logging
--------
-
-In your worker, just call the log method with the string you want logged:
-
- log "Starting to do something..."
-
-The log will be available for viewing via the SimpleWorker UI or via log in the API:
-
- SimpleWorker.service.log(job_id)
-
-or if you still have a handle to your worker object:
-
- worker.get_log
-
-Setting Progress
-----------------
-
-This is just a way to let your users know where the job is at if required.
-
- set_progress(:percent => 25, :message => "We are a quarter of the way there!")
-
-You can actually put anything in this hash and it will be returned with a call to status. We recommend using
-the format above for consistency and to get some additional features where we look for these values.
-
-Schedule a Recurring Job - CRON
-------------------------------
-
-The alternative is when you want to user it like Cron. In this case you'll probably
-want to write a script that will schedule, you don't want to schedule it everytime your
-app starts or anything so best to keep it external.
-
-Create a file called 'schedule_email_worker.rb' and add this:
-
- require 'simple_worker'
- require_relative 'email_worker'
-
- worker = EmailWorker.new
- worker.to = current_user.email
- worker.subject = "Here is your mail!"
- worker.body = "This is the body"
- worker.schedule(:start_at=>1.hours.since, :run_every=>3600)
-
-Now run it and your worker will be scheduled to run every hour.
-
-SimpleWorker on Rails
----------------------
-
-Rails 2.X:
-
- config.gem 'simple_worker'
-
-Rails 3.X:
-
- gem 'simple_worker'
-
-Now you can use your workers like they're part of your app! We recommend putting your worker classes in
-/app/workers path.
-
-Configuring a Database Connection
----------------------------------
-
-Although you could easily do this in your worker, this makes it a bit more convenient and more importantly
-it will create the connection for you. If you are using Rails 3, you just need to add one line:
-
- config.database = Rails.configuration.database_configuration[Rails.env]
-
-For non Rails 3, you would add the following to your SimpleWorker config:
-
- config.database = {
- :adapter => "mysql2",
- :host => "localhost",
- :database => "appdb",
- :username => "appuser",
- :password => "secret"
- }
-
-Then before you job is run, SimpleWorker will establish the ActiveRecord connection.
-
-Including/Merging other Ruby Classes
-------------------------------------
-
-If you need to inclue other classes in for your worker to use (which is very common), then you'll
-want to use the merge functions. For example:
-
- class AvgWorker < SimpleWorker::Base
-
- attr_accessor :aws_access_key,
- :aws_secret_key,
- :s3_suffix
-
- merge File.join(File.dirname(__FILE__), "..", "app", "models", "user.rb")
- merge File.join(File.dirname(__FILE__), "..", "app", "models", "account")
-
-Or simpler yet, try using relative paths:
-
- merge "../models/user"
- merge "../models/account.rb"
-
-Also you could use wildcards and path in merge_folder
-
- merge_folder "./foldername/" #will merge all *.rb files from foldername
- merge_folder "../lib/**/" # will merge all *.rb files from lib and all subdirectories
-
-The opposite can be done as well with "unmerge" and can be useful when using Rails to exclude classes that are automatically
-merged.
-
-
-Merging other Workers
----------------------
-
-Merging other workers is a bit different than merging other code like above because they will be
-uploaded separately and treated as distinctly separate workers.
-
- merge_worker "./other_worker.rb", "OtherWorker"
-
-Merging Mailers
----------------------
-
-You could easily merge mailers you're using in your application.
-
- merge_mailer 'mailer_file' #if your mailer's templates are placed in default path
- #or
- merge_mailer 'mailer_file', {:path_to_templates=>"templates_path"}#if you're using mailer outside of rails with custom templates path
-
-### Configuring a Mailer Connection
-
-If you are using Rails 3,your action_mailer connection would be configured automatically from your config
-
-For non Rails 3 or if you want to use different mailer configs, you should add the following to your SimpleWorker config:
-
- config.mailer = {
- :address => "smtp.gmail.com",
- :port => 587,
- :domain => 'gmail.com',
- :user_name => GMAIL_USERNAME
- :password => GMAIL_PASSWORD
- :authentication => 'plain',
- :enable_starttls_auto => true}
-
-Then before you job is run, SimpleWorker will establish the ActionMailer connection.
-
-Merging Gems
----------------------
-
-This allows you to use any gem you'd like with SimpleWorker. This uses the same syntax as bundler gem files.
-
- # merge latest version of the gem
- merge_gem "some_gem"
- # or specify specific version
- merge_gem "some_gem_with_version", "1.2.3"
- # or if gem has poor naming scheme
- merge_gem 'mongoid_i18n', :require => 'mongoid/i18n'
- # of if gem requires other directories outside lib
- merge_gem 'prawn', :include_dirs=>['data']
-
-
-[Check here for more info on merge_gem](http://support.simpleworker.com/kb/working-with-simpleworker/merging-gems-into-your-worker).
-
-
-Job Timeout
---------------
-
-By default, each job has 60 minutes (3600 seconds to complete). If you know that your job should take less than that, you can specify a timeout explicitly:
-
- worker.queue(:timeout=>1800)
-
-This will kill your job if it is running more than 1800 seconds, or half an hour.
-
-
-
-Global Merging
---------------
-
-If you want to merge items for all of your workers, you can do merges in your SimpleWorker.configure block:
-
- config.merge 'my file'
- config.merge_gem 'httparty'
-
-
-
-Configuration Options
----------------------
-
-### Global Attributes
-
-These are attributes that can be set as part of your config block then will be set on
-all your worker objects automatically. This is particularly good for things like database
-connection info or things that you would need to use across the board.
-
-Eg:
-
- config.global_attributes[:db_user] = "sa"
- config.global_attributes[:db_pass] = "pass"
-
-Then in your worker, you would have the attributes defined:
-
- attr_accessor :db_user, :db_pass
-
-
-Development of the Gem
+Discussion Group
----------------------
Join the discussion group at: https://groups.google.com/forum/?hl=en#!forum/simple_worker