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