如何在 whenever 任务中 运行 capistrano 任务?

How to run a capistrano task within a whenever task?

whenever gem 设置正确。我如何 运行 我的 whenever schedule.rb 中的 capistrano

我的schedule.rb

every 1.minute, roles: [:app] do
   # how to run here a capistrano task
   # invoke 'my_app:test'
end

我的 capistrano 任务:

namespace :my_app do

  desc 'test'

  task :test do
    on roles(:web) do
      puts "the task runs"
    end
  end
end

或者我应该将该任务移至 rake 任务中。我应该 运行 在 whenevercapistrano 中完成任务吗?

我建议您选择后一种方法,将逻辑移至 rake 任务并从 whenever 和 Capistrano 执行它。这样做会更容易、更干净。

Jan,您可能会发现文档非常有用 https://github.com/javan/whenever。下面的代码示例 - 我刚刚从文档中复制并编辑了它。

schedule.rb

# run this task only on servers with the :app role in Capistrano
# see Capistrano roles section below
every :day, at: '12:20am', roles: [:web] do
  rake "app_server:task"
end

lib/tasks/test_task.rb

namespace :my_app do
  desc 'test'
  task :test do
    puts "the task runs"
  end
end

我相信通过 Whenever 创建 Rake 任务和 运行 它更容易。你可以选择角色,所以基本上你不需要使用Capistrano任务(我相信你只是因为角色而想使用它)。