我正在使用Ruby on Rails和Heroku。
我想要像rake db:migrate这样的东西,它只会运行以前没有运行的部分。
我可以设置一个可以运行其他rake任务的rake任务,但是是否只运行那些之前没有运行的任务?
如果我想让rake任务自动运行,还有什么选择?
答案 0 :(得分:0)
首先,运行两次rake任务,即rake db:migrate
如果数据库列已经存在,则不会复制或覆盖它们。
例如,用于将rails应用程序部署到任何地方的capistrano,每次部署应用程序时都会重新运行db:migrate
或assets: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