【问题标题】:Ruby on rails: Whenever/cronjob doesn't workedRuby on rails:每当/cronjob 不起作用
【发布时间】:2013-08-04 09:20:19
【问题描述】:

我写了一个 cronjob,但即使我更新了我的 schedule.rb,它也不会开始工作。我使用 javan/无论何时。我正在使用:

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

当我 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

这是我的日程安排.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

公司模式:

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

错误日志(更新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'

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 model whenever cron-task


    【解决方案1】:

    您的 production.rb 文件第 69 行似乎存在问题。知道那是什么吗?

    另外,为了启动编写的cronjob,你需要运行

    whenever --update-crontab uniquejobname
    

    其中 uniquejobname 是 cronjob 的一些标识符

    【讨论】:

    • 我已经声明过了。我每次都应该使用“whenever --update-crontab uniquejobname”命令来启动cronjob?
    • 不,您只需运行一次,它就会为您设置好您的 cronjob 文件(请注意,如果您完全更新 schedule.rb,您必须再次运行它)。听起来您的 cron 环境没有在与您的应用程序相同的环境中运行。您的 cron 说该工作是针对生产环境的,这是您尝试运行它的地方吗?
    • 我需要在本地测试它,所以我猜我在开发中也需要它?稍后我将在 Heroku 中使用它进行生产。我不确定在哪里可以检查。 @bmac151
    • 默认是生产环境,需要设置为开发环境。尝试添加 environment: 'development' 像这样: runner "Company.update_all_likes", environment: 'development' 记得重新运行命令来重新生成 cronjob。当你 crontab 时,它应该说开发而不是生产。
    • 谢谢!解决了!只是一个奇怪的问题,所以当我需要将应用程序部署到 heroku 时,是否需要将其重置回生产环境?再次感谢!
    猜你喜欢
    • 2015-11-08
    • 1970-01-01
    • 2014-01-12
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多