Warum wird meine benutzerdefinierte Rake-Task in lib / Task in Rails 3 nicht erkannt?

78

Integrierte Rake-Aufgaben funktionieren einwandfrei, aber meine neue benutzerdefinierte Aufgabe in Project / lib / task / pays.rb wird nicht geladen:

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'

Es funktioniert gut, wenn ich die Datei application.rb lade:

require 'lib/tasks/payments.rb'

... aber es bricht andere Dinge:

$ rails s
./lib/tasks/payments.rb:1: undefined method `namespace' for main:Object (NoMethodError)
Sambesi
quelle
Falls hier jemand landet, der Rails nicht verwendet: Legen Sie Ihre .rakeDateien in einem Verzeichnis namens ab rakelib.
Joseph Mansfield

Antworten:

33

In diesem speziellen Fall .rakeverursachte das Fehlen einer Erweiterung den Fehler. Ich hatte jedoch heute das gleiche Problem mit einer Rails 4.2-App, und das lag daran, dass ich keine descfür meine Rake-Aufgabe hatte. Stellen Sie also sicher, dass Sie eine hinzufügen, wenn Sie Ihre eigene Aufgabe schreiben (dh keine generieren) desc.

Für weitere Informationen: http://guides.rubyonrails.org/command_line.html#custom-rake-tasks

aceofbassgreg
quelle
1
Als ich Howeverin Ihrer Antwort sah , wusste ich bereits, dass Ihre Antwort mein Problem lösen wird;) +1
Aleks
Wirklich sehr, sehr seltsam, aber froh, dass es das Problem gelöst hat
Kaka Ruto
0

Gemäß Rails-Handbuch 2.10 Benutzerdefinierte Rechenaufgaben

Benutzerdefinierte Rake-Tasks haben die Erweiterung .rake und werden in Rails.root / lib /asks abgelegt.

Aber du hast eine .rbErweiterung.

Arup Rakshit
quelle