Search code examples
ruby-on-railsruby-on-rails-3modelwhenevercron-task

Ruby on rails: Whenever/cronjob doesn't worked


I wrote a cronjob but it won't start working even though I updated my schedule.rb. I used javan/whenever. I am using:

ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin10.3.0]

When I crontab -l:

# Begin Whenever generated tasks for: company_list
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
* * * * * /bin/bash -l -c 'cd /Users/-/rails_projects/company_list && script/rails runner -e production '\''Company.update_all_likes'\'' >> /Users/-/rails_projects/company_list/log/cron.log 2>&1'
# End Whenever generated tasks for: company_list

This is my schedule.rb

set :output, "#{path}/log/cron.log"
env :PATH, '/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin'


every 1.minute do
  runner "Company.update_all_likes"
end

Company Model:

def update_all_likes
    $i = 0
    while $i < Company.size  do
        uri = URI("http://graph.facebook.com/" + Company.find[$i].fbid)
        data = Net::HTTP.get(uri)
        update_attribute(:likes,JSON.parse(data)['likes'])
        $i +=1
    end     
end

Error log (updated 2):

/Users/=/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.2.13/lib/rails/commands/runner.rb:53:in `eval': Could not find table 'companies' (ActiveRecord::StatementInvalid)
from /Users/=/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.2.13/lib/active_record/connection_adapters/sqlite_adapter.rb:346:in `columns'
from /Users/=/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.2.13/lib/active_record/connection_adapters/schema_cache.rb:12:in `block in initialize'
from /Users/=/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.2.13/lib/active_record/model_schema.rb:228:in `yield'
from /Users/=/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.2.13/lib/active_record/model_schema.rb:228:in `default'
from /Users/=/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.2.13/lib/active_record/model_schema.rb:228:in `columns'
from /Users/=/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.2.13/lib/active_record/model_schema.rb:248:in `column_names'
from /Users/=/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.2.13/lib/active_record/relation/calculations.rb:221:in `aggregate_column'

Solution

  • It looks like there is an issue with your production.rb file, line 69. Any idea what that is?

    Also, in order to start the cronjob written using whenever, you need to run

    whenever --update-crontab uniquejobname
    

    where uniquejobname is some identifier for the cronjob