Cron-joby generowane przez Whenever mają następującą postać:
* * * * * /u/apps/myapp/releases/20100318100534/script/runner -e production "Model.do_something"
Niestety Bundler oczekuje gemfile’a w katalogu, z którego odpalany jest dowolny skrypt ładujący środowisko aplikacji.
Co trochę ciężko w przypadku cronjobów spełnić, bo nie będę zaśmiecał katalogów serwera Gemfile’ami.
Oczywiście odpalenie zlecenia w formie
cd /u/apps/myapp/releases/20100318100534; script/runner -e production "Model.do_something"
działa wzorowo.
Pytanie: da się jakoś wymusić na whenever takie właśnie generowanie zleceń w crontabie, czy muszę forkować?
U nas jest to tak zrobione:
Dodajesz do lib/whenewer/job_types plik runner_with_chdir.rb
[code]module Whenever
module Job
class RunnerWithChdir < Whenever::Job::Default
def output
path_required
%Q(cd #{@path}; #{File.join('script', 'runner')} -e #{@environment} #{task.inspect})
end
end
end
class JobList
def runner_with_chdir(task, options = {})
options.reverse_merge!(:environment => @environment, :path => @path)
options[:class] = Whenever::Job::RunnerWithChdir
command(task, options)
end
end
end[/code]
a w config/schedule.rb
ustawiasz zmienną path
U nas jest to tak zrobione:[/quote]
Dostać odpowiedź od kolegi z pracy, pracującego nad tym samym projektem, siedzącego dwa biurka dalej, na ogólnopolskim forum – bezcenne
Tomash, sprawdź jeszcze to co ja zaproponowałem, chyba, że wolisz monkey patchować liby niż załatwiać sprawę 1 linijką ;-). U mnie w każdym razie działa (też miałem problem z bundlerem jeśli task nie odpalił się z katalogu railsów).
OK, sprawdzę, chociaż prawdę mówiąc rozszerzenie whenever o jedną metodę (BTW, nieinwazyjne rozszerzenie o metodę to NIE JEST monkeypatching) w zupełności zaradziło problemowi (i już było w kodzie projektu tak naprawdę).
Dla mnie grzebanie w cudzym kodzie jest monkey patchingiem (co z tego że dodajesz metodę, skoro w następnej wersji tej biblioteki ta klasa może w ogóle wylecieć).
mam problem z zadaniem dla crona wygenerowanym przez whenever, wyglada ono tak:
[quote]PATH=/home/smart/www/.python/bin:/usr/local/python2.6/bin:/home/smart/www/.ruby/gems/1.8/bin/:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:/usr/lib/ruby/gems/1.8/bin/
0,10,20,30,40,50 * * * * cd /home/smart/www/projects/aplikacja-development && RAILS_ENV=development /usr/bin/env rake RAILS_ENV=development my:mailing:send_results_access[/quote]
Kiedy wklejam samą komende do konsoli to rake ładnie się odpala ale cron sam z siebie juz nie. Gdzie moge szukać jakiś logów od rake czy crona zeby sprawdzić co jest grane ?
Ech, kolejny upgrade bundlera (0.9.26) znowu zepsuł whenever. Robię rollback.
Ja wiem że whenever jest kijowo napisany i pamiętam co Yehuda mówił na ten temat na Euruko, ale to już jest trochę męczące. Czy Javan nie mógłby się ogarnąć wreszcie?
EDIT: Disregard, whenever od 0.5.0 już jest strawny i nie wymaga opisanych wyżej hacków. Proponuję zablokować lub usunąć temat