Czasem potrzebujemy uruchomić zadanie Rake'owe niezależnie od katalogu w którym się znajdujemy. Powodem tego może być np potrzeba wrzucenia rake'owego taska do Crona, żeby odpalał się np. co 5 minut. Jak tego dokonać?
Pierwszą rzeczą jest dowiedzenie się gdzie leży Rake:
# Komenda: which rake # Wynik: /usr/local/bin/rake
Jeśli z jakiegoś powodu nie mamy uprawnień do używania which, po prostu musimy strzelać. Jest duża szansa że rake będzie dokładnie tam, gdzie w powyższym przykładzie (chyba że korzystamy z RVM i nie jest to wersja --system).
Mając już rake'a, możemy przystąpić do działania. Załóżmy że chcemy odpalać go co 5 minut. W tym celu definiujemy następującą regułę:
*/5 * * * * env -i KOD_DO_ODPALENIA
Zagwarantuje nam to, że deamon systemowy, uruchomi nasz KOD_DO_ODPALENIA, co 5 minut. Następnie musimy dopisać kod który mamy uruchomić. Aby to zrobić, musimy powiązać przejście do katalogu aplikacji z odpaleniem jej. Robimy to operatorem &&. Najpierw mówimy deamonowi gdzie chcemy być:
cd /home/nazwa_konta/rails/apka/
następnie co chcemy uruchomić i w jakim środowisku:
/usr/local/bin/rake cron:all RAILS_ENV=production
i łączymy to w jedną regułę:
*/5 * * * * env -i cd /home/nazwa_konta/rails/apka/ && /usr/local/bin/rake cron:all RAILS_ENV=production
jeśli tamto nie zadziała, można w ten sposób:
*/5 * * * * env -i bash -c 'cd /home/nazwa_konta/rails/apka/; /usr/local/bin/rake cron:all RAILS_ENV=production'
Wersja dla Crona który nie ma tych samych zmiennych środowiskowych co shell:
*/5 * * * * source $HOME/.serv && cd /home/nazwa_konta/rails/apka && rake cron:all RAILS_ENV=production
Leave a Reply