每当宝石都没有更新Cron作业

时间:2016-01-08 14:32:22

标签: ruby-on-rails passenger whenever

有一系列rake任务应该由when gem转换成cron文件,我想知道为什么take节目指向旧版本。

无论何时以某种方式处于活动状态,即使它列在gem文件(和关联的锁定文件)中,并且部署在部署中引用时,也无法断言:

tar: DEBUG [1f7d4e56]   bin/whenever: time stamp 2016-01-08 15:01:20 is 88.787104175 s in the future

更新检查bundle exec whenever -v会返回正确的版本。 需要捆绑执行...

在调用bundler和rails之后,Capfile包含require "whenever/capistrano"

require 'capistrano/bundler'
require 'capistrano/rails'
require 'whenever/capistrano'

注意:这是在开发模式下测试的。

3 个答案:

答案 0 :(得分:0)

我在插件时使用Capistrano时遇到了同样的问题,我通过自定义部署shell脚本来解决它,cap production deploy是许多命令中的一个,然后在此脚本中包含cap production cron:regen;我称为部署。 sh,使用deploy.rb中的命令:

namespace :cron do
  desc "restart cron"

  task :regen do
     on roles(:app) do |host|
       rails_env = fetch(:stage)
       execute_interactively "crontab -r;bundle exec whenever --update-crontab;crontab -l;"
    end
  end
end

def execute_interactively(command)
   port = fetch(:port) || 22
   exec "ssh root@#{fetch(:ip)} -t 'cd SERVER_PATH_OF_YOUR_APP && #{command}'"
end

我将这些函数用于所有类型的不同命令,因为Capistrano仍然给我带来了很多本机插件的问题。

答案 1 :(得分:0)

功能性答案。 instructions具有误导性如果您不需要在capistrano部署中的不同服务器上运行不同的作业,那么您现在可以安全地停止阅读,一切都应该像往常一样工作。继续阅读。

在此语句之后嵌套了块。角色默认为 [:db] 。因此有两种错误来源:

  1. schedule.rb
  2. 中未指定不同计算机上的不同job_roles
  3. 检查您的环境文件。如果未列出“db”,则时,

答案 2 :(得分:0)

如果您对 / / capistrano 不满意,您可以创建一个简单的Capistrano任务来更新cron作业:

namespace :deploy do
  desc "Update crontab with whenever"
  task :update_cron do
    on roles(:app) do
      within current_path do
        execute :bundle, :exec, "whenever --update-crontab #{fetch(:application)}"
      end
    end
  end

  after :finishing, 'deploy:update_cron'
end

代码部署完成后将调用该任务。