如何只运行一次rake任务

时间:2015-01-27 20:54:28

标签: ruby-on-rails ruby-on-rails-4 rake-task

我正在使用Ruby on Rails和Heroku。

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

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

如果我想让rake任务自动运行,还有什么选择?

1 个答案:

答案 0 :(得分:0)

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

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

要自动运行任务,您需要类似cron作业的东西。 Whenever是一个很棒的ruby gem,允许你使用心爱的ruby语法安装这样的作业。

安装gem并在rails应用程序的根目录中运行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