Mam zadanie Rails: czy powinienem używać script/runner czy rake?
Dla ad hoc rails mamy kilka alternatyw implementacyjnych, wśród których najważniejsze wydają się być:
script/runner some_useful_thing
I:
rake some:other_useful_thing
Którą opcję wybrać? Jeśli jest wyraźny faworyt, to kiedy, jeśli w ogóle, powinienem rozważyć użycie drugiego? Jeśli nigdy, to dlaczego przypuszczasz, że jest nadal obecny w ramach bez ostrzeżeń o deprecjacji?
8 answers
Różnica między nimi jest taka, że script/runner
boots Rails, podczas gdy zadanie Rake nie działa, chyba że powiesz mu to, czyniąc zadanie zależnym od :environment
, Jak to:
task :some_useful_task => :environment do
# do some useful task
end
Ponieważ bootowanie szyn jest drogie, warto je pominąć, jeśli można tego uniknąć.
Poza tym są mniej więcej równoważne. Używam obu, ale ostatnio używamscript/runner
wykonując skrypt osobno bardziej.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-26 18:49:07
FWIW wydaje się, że jest jakiś ruch od używania script runnera na rzecz rake ' a:
Update( 4/25/2009): polecam używanie zadań rake zamiast script/runner do powtarzających się zadań.
Również, jako za ten post możesz używać rake do powtarzających się zadań po prostu dobrze:
Gdybym chciał, żeby to działało co noc w mojej bazie produkcyjnej o północy, mógłbym napisać cronjob, który wygląda mniej więcej tak:
0 0 * * * cd / var / www/apps/ rails_app / & & /usr/local/bin / rake RAILS_ENV=production utils:send_expire_soon_emails
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-09 22:31:49
Poprawione na podstawie komentarza 2 w dół. Daj im karmę!
FWIW-Rails 3.0 + zmienia sposób inicjalizacji systemu Rails w autonomicznym skrypcie.
require File.dirname(__FILE__) + '/config/environment'
Jak wspomniano powyżej można również zrobić:
rails runner script/<script name>
Lub umieścić cały kod w zadaniu Rake, ale mam dużo kodu z Rails 2; więc nie chciałem iść tą ścieżką od razu.
Każdy ma swoje wady i zalety.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-05 22:45:14
Przekazywanie parametrów do zadania grabie to wrzód na tyłku, delikatnie mówiąc. Musisz albo uciekać się do zmiennych środowiskowych, albo bardzo hakerski system parametrów, który nie jest intuicyjny i ma wiele zastrzeżeń.
Jeśli Twoje zadanie musi obsługiwać argumenty linii poleceń z gracją, to pisanie skryptu jest dobrą drogą.
Luke Francl wspomina script/runner booting up Rails. To prawda. Ale jeśli nie chcesz uruchamiać rails to po prostu uruchom skrypt tak jak jest bez script/runner. Tak więc jedyną prawdziwą różnicą między skryptami a zadaniami rake ' a jest ich estetyka. Wybierz to, co ci pasuje.
Używam zadań rake do małych zadań(jedna lub dwie linie). Wszystko bardziej skomplikowane trafia do katalogu script/. Złamię tę zasadę, jeśli myślę, że inni programiści będą oczekiwać, że kod będzie żył w jednym miejscu nad drugim.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-15 00:58:07
Jedną z rzeczy, które zrobiłem, to po prostu napisać normalne Skrypty ruby i umieścić je w katalogu script/maintenance
.
Wszystko, co musisz zrobić, aby załadować rails i uzyskać dostęp do wszystkich modeli, itp., To umieścić require '../../config/environment.rb'
na górze pliku, a następnie odejść.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-26 19:35:44
W Rails 3.0+, config/environment.rb
wymaga config/application.rb
, który wymaga config/boot.rb
.
environment.rb
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-31 17:44:30
Dla jednorazowych poleceń skrypt / runner może być w porządku. W przypadku powtarzanych zadań prowizja jest łatwiejsza w dłuższej perspektywie i ma podsumowanie, jeśli zapomnisz, co robi.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-26 17:36:33
Odnoszę wrażenie, że skrypt / runner służy przede wszystkim do zadań okresowych. Np. praca crona, która działa:
SomeClass.update_from_web('http://www.sourcefordata.gov/')
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-26 18:03:38