在轨道上的红宝石中的Cron工作不起作用

时间:2012-04-03 14:23:15

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

我跟着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中。遗失了什么?

2 个答案:

答案 0 :(得分:0)

我使用过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中将没有任何内容。否则它会显示

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

试试..

答案 1 :(得分:0)

所以......几件事。

  1. 您需要使用Capfile和config / deploy.rb来使用Capistrano和Whenver部署代码。你可以通过运行capify .得到这个......你最有可能在capistrano部署中观看railscast
  2. 每当使用配置如:
  3. schedule.rb

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

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

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