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