我有一个简单的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任务?我有什么选择?
答案 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编写的!)
所以,检查一下,如果我离开基地,请告诉我。