如何只运行一次耙子任务



我正在使用Ruby on Rails和Heroku。

我想要像 rake db:migrate 这样的东西,它只会运行以前没有运行过的部分。

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

如果我希望自动运行耙子任务,还有什么选择?

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

例如,capistrano用于将rails应用程序部署到基本上任何地方,每次部署应用程序时都会重新运行db:migrateassets:precompile等任务。所以真的没有必要担心这一点。

要自动运行任务,您将需要类似 cron 作业的东西。每当是一个伟大的红宝石,它允许您使用心爱的红宝石语法安装这样的作业。

在 rails 应用程序的根目录中安装 gem 并运行 wheneverize . 后,您可以编辑 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

最新更新