Page 131 of 165

Krótko i szybko o selectorach JS w Prototype

Pracując dzisiaj nad Susanoo dla Senpuu, wyszło na jaw, że korzystanie z takiego selectora:

$$('tr[class = "parent_'+id+'"]')

kiedy klasa nie jest jedna ale jest ich kilka, jak np. w takim przypadku:

class="parent_252342 body status_2"

nic nie da.

Wyniki nie zostaną poprawnie wybrane ponieważ nie pasują "idealnie". Aby w takim wypadku wybrać elementy z klasą parent_ID ale także z innymi, musimy skorzystać z takiego selectora:

$$('tr[class ~= "parent_'+id+'"]')

Poniżej prezentuję jeszcze kilka innych przykładów selectorów:

$$('.class-a,.class-b');
$$('div[class~="class-a"]')
$$('td:not(.class-b)');
$(element).select('.class-a');

w zasadzie to co tutaj widać, to w dużej mierze wykorzystanie selectorów dostępnych w CSS3.

Uruchamianie zadań Rake z poziomu innych katalogów (nie z katalogu projektu)

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

Copyright © 2024 Closer to Code

Theme by Anders NorenUp ↑