【问题标题】:Cron job not being updated by whenever gem每当 gem 不更新 Cron 作业
【发布时间】:2016-01-08 14:32:22
【问题描述】:

有一系列 rake 任务应该由whenge gem 翻译到cron 文件中,我想知道为什么拍摄节目指向旧版本。

不能断言无论何时都是活动的,即使它在 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 会返回正确的版本。 那里需要 bundle exec...

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

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

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

【问题讨论】:

    标签: ruby-on-rails passenger whenever


    【解决方案1】:

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

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

    1. schedule.rb 中没有指定不同机器上的不同 job_roles
    2. 检查您的环境文件。如果未列出“db”,则不会触发。

    【讨论】:

      【解决方案2】:

      每当使用插件时,我在使用 Capistrano 时遇到了同样的问题,我通过制作自定义部署 shell 脚本来解决它,cap production deploy 是许多命令中的一个,然后在这个脚本中包含 cap production cron:regen; 我称为 deploy.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 仍然给我使用它使用的许多本机插件问题。

      【讨论】:

      • 当然,只要你在服务器上正确设置了 gem,这里的问题确实是 Capistrano。
      • 是的,我有一种讨厌的感觉,即 Capistrano 没有正确设置,只要给定 command not found... 以及所有其他似乎在变化的事情。我会记下你的 shell 脚本!
      【解决方案3】:

      如果您对 whenever/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
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-03-01
        • 1970-01-01
        • 2013-06-21
        • 1970-01-01
        • 2015-02-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多