2016-07-24 22 views
0

Ich versuche, eine Rake-Aufgabe zu erstellen, die einen Dienst verwendet. Innerhalb dieses Dienstes möchte ich den letzten gespeicherten Datensatz einer MonthlyMetrics Tabelle in meiner Datenbank laden.Nicht initialisierter konstanter Fehler beim Versuch, auf einen Datenbankeintrag in einem Dienst zu verweisen

Innerhalb meiner Rake-Datei:

require 'metrics_service' 
namespace :metrics do 
    @metrics_service = MetricsService.new 

    task :calculate_metrics => [:check_for_new_month, :update_customers, :update_churn, :do_more_stuff] do 
    puts "Donezo!" 
    end 

    # ...more cool tasks 

end 

Und mein MetricsService innerhalb lib/metrics_service.rb:

class MetricsService 

    def initialize 
    @metrics = MonthlyMetric.last 
    @total_customer_count = total_customers.count 
    assign_product_values 
    end 

    # Methods to do all my cool things... 

end 

Jedes Mal, wenn ich versuche, so etwas wie rake:db:migrate zu laufen, bekomme ich folgende Fehlermeldung:

NameError: uninitialized constant MetricsService::MonthlyMetric

Ich bin mir nicht sicher, warum es versucht, auf MonthlyMetric zu verweisen, wie es ist ... Als eine Klasse innerhalb der MetricsService Namespace ..? Es ist nicht so, als ob ich versuche, MonthlyMetric als verschachtelte Klasse innerhalbMetricsService zu definieren ... Ich versuche nur, es als eine ActiveRecord-Abfrage zu bezeichnen.

Ich habe andere ActiveRecord Abfragen, zum Beispiel User, in anderen Diensten innerhalb des gleichen Verzeichnisses durchgeführt.

Was mache ich hier falsch?

Antwort

1

Ich denke, wenn Sie nur => :environment am Ende Ihrer Rake-Aufgabe hinzufügen, kann das das Problem beheben.

Wie in:

task :calculate_metrics => [:check_for_new_month, :update_customers, :update_churn, :do_more_stuff] => :environment do

Ich habe in ähnlichen Problemen führen, wo Rails nicht die richtige Umgebung nicht initialisiert werden, ohne dass dies zu jedem Rake Aufgabe geheftet.

+1

Sie hatten völlig Recht! Obwohl die Umgebung in das Aufgabenfeld fallen sollte, wird andernfalls ein Fehler in der Hash-Rakete ausgelöst. – Doug