rails rake在运行rake db:migrate时运行lib / tasks / scrape.rake

时间:2011-03-13 19:48:03

标签: ruby-on-rails rake

我有一个简单的rake脚本来刮擦网页。它的路径是lib / tasks / scrape.rake。

dan@snowcrash:~/snowcrash$ ls lib/tasks/
scrape.rake

我在db / migrate中也有一些数据库迁移脚本:

dan@snowcrash:~/snowcrash$ ls db/migrate/
20110307213515_create_questions.rb
20110310010000_create_answers.rb
20110313191820_add_question_id_to_answers.rb

问题是当我运行rake db:migrate时。它似乎也运行我的lib / tasks / scrape.rake任务:

dan@snowcrash:~/snowcrash$ rake db:migrate
(in /home/dan/snowcrash)
Fetched document: http://www.baidu.com/s?wd=love+me
\t Content Type: text/html\n
\t Charset: gbk\n
\t Content-Encoding: \n
\t Last Modified: \n\n
==  AddQuestionIdToAnswers: migrating =========================================
-- add_column("questions", "answer_id", :integer)
   -> 0.4923s
-- add_index("questions", "answer_id")
   -> 0.4954s
==  AddQuestionIdToAnswers: migrated (0.9881s) ================================

我做了一些谷歌搜索,并找到了这个文档:http://jasonseifer.com/2010/04/06/rake-tutorial。他说:

  

Rails会自动接收任务   在lib / tasks中。

如何让“rake db:migrate”不运行我的其他rake任务?我有什么选择?

1 个答案:

答案 0 :(得分:4)

如果没有看到scrape.rake任务的内容,很难确定发生了什么,但我的猜测是你的scrape任务的功能实际上并没有包含在一个任务。例如,这是一个正确的rake任务:

desc "Output something on the command line"
task :output_stuff do
  puts "I'm outputting stuff!"
end

如果您的.rake文件的内容只是:

puts "I'm outputting stuff!"

然后当Rails加载你的rake任务时,代码会立即执行(毕竟Rake任务是用Ruby编写的!)

所以,检查一下,如果我离开基地,请告诉我。