Próbuję utworzyć niestandardowe zadanie rake, ale wygląda na to, że nie mam dostępu do moich modeli. Myślałem, że było to coś domyślnie uwzględnionego w zadaniu dotyczącym szyn.
Mam następujący kod w lib / task / test.rake:
namespace :test do
task :new_task do
puts Parent.all.inspect
end
end
A oto jak wygląda mój model nadrzędny:
class Parent < ActiveRecord::Base
has_many :children
end
To dość prosty przykład, ale pojawia się następujący błąd:
/> rake test:new_task
(in /Users/arash/Documents/dev/soft_deletes)
rake aborted!
uninitialized constant Parent
(See full trace by running task with --trace)
Jakieś pomysły? Dzięki
ruby-on-rails
activerecord
rake
task
gmoniey
źródło
źródło
new_task
do bieżącego środowiska? jaka jest aktualna wartość:environment
? Google nie pomaga.new_task
najpierw załaduj środowisko (załaduj modele), a następnie uruchom new_task.może być wymagana konfiguracja (która powinna określać wszystkie wymagane modele itp.)
na przykład:
alternatywnie możesz po prostu wymagać każdego z osobna, ale możesz mieć problemy ze środowiskiem AR nie skonfigurowane itp.
źródło
Kiedy zaczniesz pisać zadania rake , użyj generatora, aby je dla ciebie wytłumaczyć.
Na przykład:
Otrzymasz kod pośredniczący utworzony w lib / task o nazwie
my_tasks.rake
(oczywiście użyj własnej przestrzeni nazw.) Który będzie wyglądał tak:Wszystkie modele szyn itp. Będą dostępne dla bieżącego środowiska z każdego bloku zadań, chyba że korzystasz ze środowiska produkcyjnego , w którym to przypadku musisz wymagać konkretnych modeli, których chcesz użyć. Zrób to w ramach zadania. (IIRC różni się w zależności od wersji Rails.)
źródło
environment
jest to wymagane jako zależność, a następnie powiedzieć składnię zamiast zachęcać OP do polegania na „magicznych” narzędziach, które nawet nie używają żadnej magii?Dzięki nowej składni ruby hash (Ruby 1.9) środowisko zostanie dodane do zadania rake w następujący sposób:
źródło
Zależność: środowisko jest dość poprawnie wywołana, ale rake wciąż może nie wiedzieć o innych klejnotach, od których zależą twoje modele - w jednym przypadku mój „chronione_atrybuty”.
Odpowiedź brzmi:
Gwarantuje to, że środowisko zawiera wszystkie klejnoty określone w twoim pliku Gemfile.
źródło
Wygeneruj zadanie za pomocą poniższego polecenia (przestrzeń nazw z nazwą zadania):
Użyj poniższej składni, aby dodać logikę:
Uruchom powyższe zadanie za pomocą polecenia poniżej:
lub
źródło