【问题标题】:Cron job in ruby on rails not workruby on rails 中的 Cron 工作不起作用
【发布时间】:2012-04-17 05:23:33
【问题描述】:

我关注了 railscast http://railscasts.com/episodes/164-cron-in-ruby,但我似乎无法让它发挥作用。

  • 我的配置中有 schedule.rb。
  • 我希望每天在我的主页上刷新我的 Database.count。
  • 我在我的文件夹中找不到 deploy.rb。它在哪里?

出于测试目的,我将其更改为每 2 秒一次。

[schedule.rb]

every '2 * * * *' do
  rake "pages_controller:home"
end

[pages_controller.rb]

class PagesController < ApplicationController
def home
  @title = "Home"
  @companies = Company.find(:all, :limit => 20)
  @count = Company.count

end

我放了

 gem 'whenever', :require => false

在我的 gemfile 中。丢失了什么?

【问题讨论】:

  • 你说你缺少 deploy.rb -- 你安装和配置 capistrano 了吗?
  • 我没有。我需要在config中手动创建一个deploy.rb吗?

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


【解决方案1】:

我使用过 cron 作业,但我将其作为 rake 任务运行,请您尝试一下

  every 3.minutes do
   set :environment, 'development'
   rake "daily",:output => {:error => 'error.log', :standard => 'cron.log'}
  end

我的任务是这样的

  require 'rubygems'

  task :daily => :environment do
    puts "i am fine"
    # do your code
  end

如果 cron 作业运行良好,那么 cron.log 中将没有任何内容。否则它会显示是否

发生任何错误,此文件将在您的应用根目录中生成。

试试吧..

【讨论】:

  • 你的任务是什么文件 :daily => :environment in?
【解决方案2】:

所以...几件事。

  1. 您需要一个 Capfile 和一个 config/deploy.rb 来使用 Capistrano 和 Whenver 部署您的代码。你可以通过运行capify . 来获得这个...你很可能应该观看关于 capistrano 部署的 railscast
  2. 无论何时使用配置如下:

schedule.rb

every 1.day, :at => '4:30 am' do 
  runner 'Rails.cache.clear'
end

我真的不认为rake "pages_controller:home 会起作用,除非这是你已经在其他地方创建的东西。我进一步假设您正在缓存此页面,这就是您需要刷新缓存的原因。

最后,您将环境设置为开发环境,这让我认为您没有部署它,而只是想重置缓存的主页...所以只需运行rake cache:clear

【讨论】:

  • in block in initialize': undefined local variable or method clear' for #<:joblist:0x000001012c2c78> (NameError) 来自 /Users/amysukumunu/.rvm/gems/ruby-1.9.2-p290/gems/whenever- 0.7.3/lib/whenever/job_list.rb:38:in `every'
猜你喜欢
  • 2014-01-12
  • 2013-06-14
  • 1970-01-01
  • 1970-01-01
  • 2014-01-05
  • 2023-04-08
  • 1970-01-01
  • 2011-01-16
  • 1970-01-01
相关资源
最近更新 更多