2014-12-11 18 views
7

mam ten dziwny problem, jeśli mam zrobić:Dlaczego otrzymuję niezainicjowanej stała dla zadania Rake, Rails 4.1.8

namespace :xaaron do 
    task :get_roles do 
     roles = Xaaron::Role.all 
     puts roles 
    end 

    task :get_role, [:name] do |t, args| 
     role = Xaaron::Role.find(args[:name].parameterize) 
     puts role 
    end 
    end 

Pierwszym zadaniem będzie działać perfekcyjnie. Mogę nawet umieścić binding.pry na boku i zrobić Xaaron::Role i odzyskać informacje o Role. Ale drugie zadanie wybucha stwierdzając, że każde zadanie wykonuję w mojej głównej aplikacji (ponieważ te zadania są wewnątrz silnika) jako: bin/rake xaaron:get_roles i bin/rake xaaron:get_role.

Dlaczego druga eksploduje, ale pierwsza nie? Czy jest coś, co się dzieje z argumentami?

Aktualizacja

Należy zauważyć, że mogę zrobić bin/rails c w głównej aplikacji, która wykorzystuje wspomniany silnik i zrobić Xaaron::Role i uzyskać informacje na temat ról tabeli.

Odpowiedz

20

Nie jestem pewien, dlaczego albo działa, ale jeśli jest to szyny i są to modele szynach wasze zadania powinny zależeć od środowiska:

task :get_roles => [ :environment ] do 

Polegając na: Zadanie środowiska, najpierw ładuje Szyny.

zobacz także:

What's the 'environment' task in Rake?

+0

oczywiście to szyny i myślę, że ładuje domyślne środowisko. Czy to rozwój, produkcja, czy jakikolwiek inny produkt. Ale źle oddaj to, co mówisz, próbując na podstawie głosów na twoją odpowiedź. – SeekingTruth

+1

Nie można również wykonać zadania ': something => [: environment], [: param] do | t, args | ... koniec "ze swoim" przykładem ", czy możesz wyjaśnić, w jaki sposób mogę przekazywać argumenty? – SeekingTruth

+2

try ': something, [: param] => [: environment]' – DGM

0

Można również uruchomić zadanie natarcia jak

bundle exec environment xaaron:get_role 

to załaduje środowisko Rails pierwszy.

+0

To właśnie dla mnie zadziałało. Nie wiem, dlaczego zostałeś cenzurowany – coisnepe