为什么我在 lib/task 中的自定义 rake 任务在 Rails 3中没有被发现?

内置的 rake 任务工作得很好,但是我的新自定义任务 Project/lib/asks/payments.rb 中没有加载:

namespace :payments  do
desc "Tally payments at the end of the month"
task :compute => :environment do
BillingPeriod.compute_new_period
end
end


$ rake payments:compute
(in /Users/rob/Code/Apps/skyfarm)
rake aborted!
Don't know how to build task 'payments:compute'

如果我加载文件 application.rb,它会工作得很好:

require 'lib/tasks/payments.rb'

但它打破了其他东西:

$ rails s
./lib/tasks/payments.rb:1: undefined method `namespace' for main:Object (NoMethodError)
19913 次浏览

将文件扩展名从 .rb更改为 .rake

根据 Rails 指南 2.10自定义 Rake 任务

自定义 rake 任务有一个. rake 扩展名,并放置在 Rails.root/lib/asks 中。

但你有 .rb分机。

在这个特定的例子中,没有 .rake扩展导致错误。然而,我今天在 Rails 4.2应用程序上遇到了同样的问题,那是因为我没有一个用于 rake 任务的 desc,所以如果你正在编写你自己的任务(也就是说没有生成任务) ,请确保你添加了一个 desc

更多信息: http://guides.rubyonrails.org/command_line.html#custom-rake-tasks