繁体   English   中英

如何仅运行一次rake任务

[英]How to run only rake task once

我正在使用Ruby on Rails和Heroku。

我想要的是rake db:migrate之类的东西,它将仅运行之前未运行过的部件。

我可以设置一个可以运行其他rake任务的rake任务,但是有没有办法只运行那些以前没有运行过的任务?

如果我希望自动执行rake任务,还有什么选择?

首先,运行两次rake任务,即rake db:migrate将不会重复也不会覆盖数据库列(如果已经存在)。

例如,用于将Rails应用程序基本上部署到任何地方的capistrano,每次部署应用程序时都会重新运行db:migrateassets:precompile等任务。 因此,无需担心。

要自动运行任务,您将需要诸如cron作业之类的任务。 只要有一颗伟大的红宝石宝石,您就可以使用最受欢迎的红宝石语法来安装这样的作业。

安装好gem并运行wheneverize . 在rails应用程序的根目录中,您可以编辑scheduler.rb并添加如下内容:

every :sunday, :at => '12pm' do
    rake my:awesome:task
end

Github页面以及默认的scheduler.rb许多有关如何构建这些作业的有用示例。

whenever --update-crontab您都可以将rubyesque cronjobs写入crontab,它将在您希望的时间定期运行任务。

**编辑

多项任务合而为一:

task :setup => [:a, :b, :c]
task :a do 
     %x(bash command)
end
task :b do 
     rake db:migrate
end
task :c do 
     rake whatever
end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM