web-dev-qa-db-fra.com

Pourquoi ma tâche de râteau personnalisée dans lib / tâches n'est-elle pas découverte dans Rails 3?

Les tâches de râteau intégrées fonctionnent bien, mais ma nouvelle tâche personnalisée, dans Project/lib/tasks/paiements.rb, ne se charge pas:

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'

Cela fonctionne très bien si je charge le fichier application.rb:

require 'lib/tasks/payments.rb'

... mais ça casse d'autres choses:

$ Rails s
./lib/tasks/payments.rb:1: undefined method `namespace' for main:Object (NoMethodError)
76
zambezi

Modifiez l'extension de fichier de .rb à .rake.

176
Michelle Tilley

Dans ce cas précis, ne pas avoir de .rake l'extension a provoqué l'erreur. Cependant, j'ai eu le même problème avec une application Rails 4.2 aujourd'hui, et c'est parce que je n'avais pas de desc pour ma tâche de râteau, alors assurez-vous si vous êtes écrire votre propre tâche (c'est-à-dire ne pas en générer une) à laquelle vous ajoutez un desc.

Pour plus d'informations: http://guides.rubyonrails.org/command_line.html#custom-rake-tasks

25
aceofbassgreg

Selon le guide Rails 2.10 Tâches de râteau personnalisées

Les tâches de râteau personnalisées ont une extension .rake et sont placées dans Rails.root/lib/tasks.

Mais vous avez .rb extension.

0
Arup Rakshit