2009-02-26 13 views
63

Dla ad hoc Rails zadań mamy kilka alternatyw realizacji, z których najważniejszym wydaje się być:Mam zadanie Rails: czy powinienem używać skryptu/runnera lub rake'a?

script/runner some_useful_thing 

i:

rake some:other_useful_thing 

Która opcja powinna wolę? Jeśli istnieje wyraźny faworyt, to kiedy, jeśli w ogóle, powinienem rozważyć użycie drugiego? Jeśli nie, to dlaczego miałbyś sądzić, że nadal jest obecny w środowisku bez ostrzeżeń o wycofaniu?

Odpowiedz

56

Różnica między nimi jest taka, że ​​script/runner buty Szyny natomiast zadaniem Rake nie powiesz chyba go poprzez zadanie zależą :environment, tak:

task :some_useful_task => :environment do 
    # do some useful task 
end 

Ponieważ uruchamianie Railsów jest drogie, warto je pominąć, jeśli można tego uniknąć.

Poza tym są one mniej więcej równoważne. Używam obu, ale ostatnio użyłem script/runner, wykonując skrypt osobno więcej.

2

Dla jednego polecenia polecenia skrypt/runner może być w porządku. W przypadku powtórzeń, zadanie rake'a jest łatwiejsze w dłuższej perspektywie i ma podsumowanie, jeśli zapomnisz, co robi.

2

Mam wrażenie, że skrypt/biegacz był głównie do okresowych zadań. Np cron, który uruchamia:

SomeClass.update_from_web('http://www.sourcefordata.gov/') 
+0

Nic, co widziałem o zadaniu "biegacza", nie wymaga lub nie zakłada, że ​​jest ono przeznaczone głównie dla zadań cron. Zamiast tego uważam runner za zadania, które nie potrzebują warstwy prezentacji Rails, ale chcą mieć dostęp do DB i modeli, i których nie wstawiłbym do kontrolera lub modelu, ponieważ nie ma sensu umieszczać go tam. –

5

Jedną z rzeczy, którą zrobiłem, jest napisanie zwykłych skryptów ruby ​​i umieszczenie ich w katalogu script/maintenance.

Wszystko, co musisz zrobić, aby załadować prowadnice i uzyskać dostęp do wszystkich modeli itp., Zostanie umieszczone na górze pliku, a następnie Cię nie będzie.

+0

Czy nie ma sensu umieszczanie ich w zadaniach prowizji? –

+1

Po co zawracać sobie głowę dodatkową złożonością zadania rake. W ten sposób mamy plik, który można uruchomić jak każdy inny skrypt w systemie * nix –

+4

^^, aby wyjaśnić: Rake jest świetny, i użyłbym go, gdybyś potrzebował zależności, itd., Ale jeśli nie, to tylko jedna rzecz do przemyślenia bez żadnego powodu. –

10

FWIW wydaje się, że niektóre movement away from using script runner za grabie:

Aktualizacja (25.04.2009): Polecam przy użyciu zadania natarcia w przeciwieństwie do skryptu/biegacza dla powtarzających się zadań.

Ponadto, jak per this post można użyć grabi dla zadań cyklicznych w porządku:

Gdybym wtedy chciał to uruchomić nocny na moim produkcyjnej bazy danych o północy, może napisać cron, który wygląda mniej więcej tak to:

0 0 * * * cd/var/www/apps/rails_app/& &/usr/local/bin/grabie RAILS_ENV = utils produkcyjne: send_expire_soon_emails

+2

Twój pierwszy link nie działa, nie masz pewności, czy artykuł został usunięty, czy tylko uporządkowano bloga. – gravitystorm

+2

Nie jestem pewna, czy pojedyncze posty na blogu (które niestety nie wyjaśniają powodów, dla których jest to roszczenie w stosunku do rake-vs-runner) naprawdę liczą się jako ruch. –

9

Poprawione na podstawie komentarza 2 w dół. Daj im karmę!

FWIW - Rails 3.0+ zmienia sposób inicjalizacji systemu Rails w samodzielnym skrypcie.

require File.dirname(__FILE__) + '/config/environment' 

Jak wspomniano powyżej, można również zrobić:

rails runner script/<script name> 

Albo umieścić cały kod w zadania Rake, ale mam dużo starszych kod z szyn 2; więc nie chciałem od razu iść tą ścieżką.

Każda ma swoje zalety i wady.

3

W Railsach 3.0+, config/environment.rb wymaga config/application.rb, który wymaga config/boot.rb.

Tak, aby załadować aplikację w Rails 3, trzeba jeszcze tylko wymagają environment.rb

9

parametry przejściu do zadania natarcia jest upierdliwe, aby co najmniej. Musisz albo użyć zmiennych środowiskowych, albo bardzo hackowskiego systemu parametrów, który nie jest intuicyjny i ma wiele zastrzeżeń.

Jeśli twoje zadanie wymaga zręcznego obsłużenia argumentów wiersza poleceń, to pisanie skryptu jest drogą do zrobienia.

Luke Francl wspomina o uruchamianiu skryptu/runnera w Railsach. To prawda. Ale jeśli nie chcesz uruchamiać szyn, po prostu uruchom skrypt tak, jak jest bez skryptu/runnera. Tak więc jedyną prawdziwą różnicą pomiędzy skryptami i zadaniami rake są ich estetyka. Wybierz, co czujesz do Ciebie.

Używam zadań rake dla małych zadań (jedna lub dwie linie). Coś bardziej skomplikowanego przechodzi do katalogu script /. Złamię tę zasadę, jeśli myślę, że inni deweloperzy będą oczekiwać, że kod będzie żyć w jednym miejscu nad drugim.

Powiązane problemy