有一系列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'
注意:这是在开发模式下测试的。
答案 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] 。因此有两种错误来源:
答案 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
代码部署完成后将调用该任务。