Chciałbym uruchomić zadanie rake w moim kontrolerze. Czy jest jakiś sposób to zrobić?Uruchom zadanie rake w kontrolerze
Odpowiedz
Nie uważam za dobry sposób wywołania zadania rake w kodzie. Zalecam umieszczenie kodu zadania, które chciałbyś wykonać gdzieś poza zadaniem rake, i zlecenie rake wywołaj ten kod.
Ma to nie tylko tę zaletę, że można łatwo wywołać prowizję zewnętrzną (co jest potrzebne), ale także znacznie ułatwia testowanie zadania rake.
+1 Zgadzam się: jest to doskonały przykład rzeczy, które powinny być refaktoryzowane i wywoływane na dwa różne sposoby. –
http://railscasts.com/episodes/127-rake-in-background Wydaje się być doskonałym powodem do uruchomienia prowizji. – baash05
Gdzie byłoby dobre "gdzieś" być "gdzieś poza zadaniem prowizji"? – user456584
Można to zrobić w kontrolerze:
%x[rake name_task]
z: name_task
jest nazwa zadania
w jaki sposób przekazujesz do niego otoczenie? – serengeti12
Nigdy nie wywaliłbym się na zgrabianie z kontrolera podczas produkcji. – Duke
@Duke przy odpowiedzi lub komentarzu możesz również wyjaśnić swoje rozumowanie, a nie tylko twierdzić (że kontroler w produkcji nie powinien wywoływać zadań rake)? Pomogłoby to zrozumieć twoje rozumowanie, zamiast tylko wiedzieć, czego nie zrobiłbyś (ale nie usłyszałeś twojego wyjaśnienia, dlaczego). – Matt
zgadzam się z ddfreynee, ale w przypadku, gdy wiemy, co trzeba kod może wyglądać następująco:
require 'rake'
Rake::Task.clear # necessary to avoid tasks being loaded several times in dev mode
Sample::Application.load_tasks # providing your application name is 'sample'
class RakeController < ApplicationController
def run
Rake::Task[params[:task]].reenable # in case you're going to invoke the same task second time.
Rake::Task[params[:task]].invoke
end
end
Zamiast tego można wymagać "rake" i .load_tasks w inicjalizatorze.
Zamiast próbować wywoływać zadanie rake w kontrolerze, wywołuj obiekty usługi zawierające dowolną logikę, którą próbujesz wykonać.
class SomeController < ApplicationController
def whatever
SomeServiceObject.call
end
end
... a potem, zakładając, że mówimy o zadaniu zwyczaj natarcia, które to wywołać obiekt serwisowy, a także:
namespace :example do
desc 'important task'
task :important_task do
SomeServiceObject.call
end
end
w przypadku, gdy nie są zaznajomieni z obiektów usługowych, oni są zwykłymi klasami ruby, które wykonują określoną pracę. Jeśli próbujesz wywołać niektóre z domyślnych zadań rake (np .: db: migrate), zdecydowanie nie polecam tego typu rzeczy z kontrolera.
To jest bardzo czysty sposób robienia tego. Dzięki. – juliangonzalez
- 1. Zadanie wielowątkowe rake
- 2. Uruchom kapibara w zadaniu rake
- 3. Odpowiedz: uruchom nieudane zadanie
- 4. Jak wywołać zadanie rake w rspec
- 5. Jak dodać zadanie Rake do domyślnego zadania Rake?
- 6. Gulp: uruchom zadanie bez przeznaczenia
- 7. Jak wykonać zadanie rake po wszystkich innych zadaniach? (to jest zadanie Rake AfterBuild)
- 8. Zadanie dostępu rake Opis z poziomu zadania
- 9. Jak przetestować zadanie rake z RSpec?
- 10. Wykonaj zadanie rake z poziomu migracji?
- 11. Przełęcz Hash jako parametr Rake zadanie
- 12. Zastąp zadanie zwolnienia rake, aby użyć Gemfury
- 13. Uruchom zadanie łyk z innego node.js skryptu
- 14. Dlaczego zadanie Rake w pętli wykonuje się tylko raz?
- 15. Błąd Capistrano: niezdefiniowana metoda "already_invoked" dla <Rake :: Zadanie load: defaults => []>: Rake :: Task
- 16. Sprawdź, czy zadanie rake istnieje z poziomu Rakefile
- 17. GitLab: Czy zadanie tworzenia kopii zapasowej rake jest atomowe?
- 18. Jak zadeklarować zadanie Rake, które zależy od sparametryzowanego zadania?
- 19. Rake: odpowiednik zadania w Django
- 20. Jeśli zamknę swój terminal, zadanie rake uruchomione na Heroku nadal będzie działać
- 21. zadaniem Rake w/argumentów ikona
- 22. ActiveRecord :: ConnectionNotEstablished w zadaniu rake
- 23. Wyłącz zadanie rake'a
- 24. Drukowanie na ekranie w zadaniu rake
- 25. niezainicjowaną Stała w zadania Rake
- 26. Statystyki rake i ogórek
- 27. jak zmusić zadanie rake do działania w środowisku programistycznym za każdym razem, gdy gem
- 28. Rake niezainicjowany stała rdoc :: rdoc
- 29. Spanie w kontrolerze
- 30. Użyj przeszukiwacza w kontrolerze
http://railscasts.com/episodes/127-rake-in-background – baash05
spróbuj tego >> 'system" rake nazwa_zadania "' – Bongs
Ryan Bates obejmuje [kilka sposobów] (http://railscasts.com/odcinki/127-prowizji w tle) w odcinku RailsCasts nr 127. –