【问题标题】:Why is my custom rake task in lib/tasks not discovered in Rails 3?为什么在 Rails 3 中没有发现我在 lib/tasks 中的自定义 rake 任务?
【发布时间】:2011-08-07 01:47:18
【问题描述】:

内置 rake 任务工作正常,但我在 Project/lib/tasks/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)

【问题讨论】:

  • 如果有人使用 Rails:将您的 .rake 文件放在名为 rakelib 的目录中。

标签: ruby-on-rails ruby-on-rails-3 rake


【解决方案1】:

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

【讨论】:

【解决方案2】:

在这种特定情况下,没有.rake 扩展会导致错误。但是,我今天在使用 Rails 4.2 应用程序时遇到了同样的问题,这是因为我的 rake 任务没有desc,所以请确保您是否正在编写自己的任务(即不生成任务)添加desc

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

【讨论】:

  • 当我在您的回答中看到However 时,我已经知道您的回答会解决我的问题;) +1
【解决方案3】:

根据 Rails 指南2.10 Custom Rake Tasks

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

但是你有.rb 扩展名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    • 2011-07-14
    • 1970-01-01
    • 2012-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多