<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-414964416092643798</id><updated>2012-02-16T23:55:46.285+01:00</updated><category term='ruby'/><category term='whenever'/><category term='solr'/><category term='logi'/><category term='sunspot'/><category term='gem'/><category term='rsync'/><category term='amazon'/><category term='jetty'/><category term='rails'/><category term='lucene'/><category term='ssh'/><category term='paperclip'/><category term='ubuntu'/><category term='rubygems'/><category term='cron'/><category term='capistrano'/><category term='crontab'/><category term='gems'/><category term='backup'/><category term='logrotate'/><title type='text'>Simple is beautiful</title><subtitle type='html'>O Ruby on Rails, Ubuntu, MySql, Solr, Lucene i inne ciekawoski</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.dedico.pl/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/414964416092643798/posts/default'/><link rel='alternate' type='text/html' href='http://blog.dedico.pl/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Marek Stachura</name><uri>https://profiles.google.com/115128213385160128203</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-A8167LY6Mek/AAAAAAAAAAI/AAAAAAAADSk/umCsBVfEmUU/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>10</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-414964416092643798.post-504847737458682023</id><published>2012-01-25T17:21:00.001+01:00</published><updated>2012-01-25T17:22:12.552+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='logrotate'/><category scheme='http://www.blogger.com/atom/ns#' term='logi'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>logrotate - rotacja logów na ubuntu</title><content type='html'>logrotate służy do rotowania określonej liczby plików log.&lt;br /&gt;&lt;br /&gt;logrotate powinien być domyślnie zainstalowany w każdym systemie Ubuntu.&lt;br /&gt;&lt;br /&gt;Dla każdej aplikacji, której logami chcemy zarządzać, dodajemy plik konfiguracyjny:&lt;br /&gt;#/etc/logrotate.d/our_app&lt;br /&gt;&lt;br /&gt;Zawartość pliku:&lt;br /&gt;/home/apps/our_app/current/log/production.log* {&lt;br /&gt;daily&lt;br /&gt;rotate 7&lt;br /&gt;compress&lt;br /&gt;missingok&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;daily - codziennie&lt;br /&gt;rotate 7 - zostaw ostatnie siedem plików&lt;br /&gt;compress - spakuj gzip&lt;br /&gt;missingok - nie krzycz, gdy nie ma żadnych logów&lt;br /&gt;&lt;br /&gt;logrotate wykonuje ten skrypt każdego dnia, datę ostatniego wykonania, można sprawdzić w pliku:&lt;br /&gt;cat /var/lib/logrotate/status&lt;br /&gt;&lt;br /&gt;Za pomocą następującej komendy można ręcznie uruchomić określoną konfigurację logrotate:&lt;br /&gt;sudo logrotate -f /etc/logrotate.d/our_app&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/414964416092643798-504847737458682023?l=blog.dedico.pl' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.dedico.pl/feeds/504847737458682023/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://blog.dedico.pl/2012/01/logrotate-rotacja-logow-na-ubuntu.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/414964416092643798/posts/default/504847737458682023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/414964416092643798/posts/default/504847737458682023'/><link rel='alternate' type='text/html' href='http://blog.dedico.pl/2012/01/logrotate-rotacja-logow-na-ubuntu.html' title='logrotate - rotacja logów na ubuntu'/><author><name>Marek Stachura</name><uri>https://profiles.google.com/115128213385160128203</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-A8167LY6Mek/AAAAAAAAAAI/AAAAAAAADSk/umCsBVfEmUU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-414964416092643798.post-6049430493405051200</id><published>2012-01-20T12:02:00.002+01:00</published><updated>2012-01-20T12:02:59.609+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='capistrano'/><title type='text'>Capistrano - czyszczenie katalogu releases</title><content type='html'>&lt;p&gt;Po raz kolejny szukam w Google składni polecenia capistrano aby wyczyścić stare 'releases', aby więcej tego nie szukać oto składnia:&lt;/p&gt;&lt;p&gt;&lt;b&gt;cap deploy:cleanup -s keep_releases=2&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;keep_releases=2&lt;/b&gt; oznacza, że pozostaną nam dwa ostanie 'releases'.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/414964416092643798-6049430493405051200?l=blog.dedico.pl' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.dedico.pl/feeds/6049430493405051200/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://blog.dedico.pl/2012/01/capistrano-czyszczenie-katalogu.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/414964416092643798/posts/default/6049430493405051200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/414964416092643798/posts/default/6049430493405051200'/><link rel='alternate' type='text/html' href='http://blog.dedico.pl/2012/01/capistrano-czyszczenie-katalogu.html' title='Capistrano - czyszczenie katalogu releases'/><author><name>Marek Stachura</name><uri>https://profiles.google.com/115128213385160128203</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-A8167LY6Mek/AAAAAAAAAAI/AAAAAAAADSk/umCsBVfEmUU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-414964416092643798.post-6782913126301715913</id><published>2012-01-03T16:13:00.000+01:00</published><updated>2012-01-03T16:21:42.386+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ssh'/><category scheme='http://www.blogger.com/atom/ns#' term='rsync'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>ssh bez hasła</title><content type='html'>Piszę to głównie po to aby nie musieć szukać ponownie tych informacji za miesiąc lub dwa, gdy będę musiał konfigurować rsync lub coś podobnego...&lt;br /&gt;&lt;br /&gt;Mamy dwa serwery:&lt;br /&gt;A - serwer produkcyjny&lt;br /&gt;B - serwer backup&lt;br /&gt;&lt;br /&gt;Zakładam, że na serwerze B posiadamy już użytkownika (np. backup) i folder .ssh w jego katalogu domowym. Zakładam także, że posiadamy już plik .ssh/authorized_keys2&lt;br /&gt;Jeśli nie, to:&lt;br /&gt;cd .ssh&lt;br /&gt;touch authorized_keys2&lt;br /&gt;chmod 600 authorized_keys2&lt;br /&gt;&lt;br /&gt;Na serwerze A, z którego będziemy robili upload za pomocą rsync generujemy klucz prywatny i publiczny, np: &lt;br /&gt;&lt;br /&gt;mkdir ~/.ssh&lt;br /&gt;chmod 700 ~/.ssh&lt;br /&gt;ssh-keygen -t rsa&lt;br /&gt;&lt;br /&gt;Wchodzimy do katalogu .ssh na serwerze A:&lt;br /&gt;cd .ssh/&lt;br /&gt;i kopiujemy klucz publiczny na serwer B:&lt;br /&gt;scp id_rsa.pub server_b_username@server_b_domain:~/id_rsa.pub&lt;br /&gt;&lt;br /&gt;Następnie logujemy się poprzez ssh na serwer B.&lt;br /&gt;cd .ssh&lt;br /&gt;cat ~/id_rsa.pub &gt;&gt; authorized_keys2&lt;br /&gt;rm ~/id_rsa.pub&lt;br /&gt;&lt;br /&gt;Następnie wylogowujemy się z serwera B, logujemy się na serwer A i z niego powinniśmy być w stanie zalogować się na serwer B bez podawania hasła.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/414964416092643798-6782913126301715913?l=blog.dedico.pl' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.dedico.pl/feeds/6782913126301715913/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://blog.dedico.pl/2012/01/ssh-bez-hasa.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/414964416092643798/posts/default/6782913126301715913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/414964416092643798/posts/default/6782913126301715913'/><link rel='alternate' type='text/html' href='http://blog.dedico.pl/2012/01/ssh-bez-hasa.html' title='ssh bez hasła'/><author><name>Marek Stachura</name><uri>https://profiles.google.com/115128213385160128203</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-A8167LY6Mek/AAAAAAAAAAI/AAAAAAAADSk/umCsBVfEmUU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-414964416092643798.post-6425690141126096319</id><published>2012-01-03T14:10:00.001+01:00</published><updated>2012-01-03T16:22:42.288+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rubygems'/><category scheme='http://www.blogger.com/atom/ns#' term='gems'/><category scheme='http://www.blogger.com/atom/ns#' term='gem'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Instalacja gem'ów bez dokumentacji na Ubuntu</title><content type='html'>Należy utworzyć plik ~/.gemrc i dodać do niego następującą linię:&lt;br /&gt;&lt;br /&gt;gem: --no-ri --no-rdoc&lt;br /&gt;&lt;br /&gt;Wylogować się, zalogować ponownie i gem install [gem_name] nie powinien już instalować dokumentacji dla wybranego gem'a.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/414964416092643798-6425690141126096319?l=blog.dedico.pl' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.dedico.pl/feeds/6425690141126096319/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://blog.dedico.pl/2012/01/instalacja-gemow-bez-dokumentacji-na.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/414964416092643798/posts/default/6425690141126096319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/414964416092643798/posts/default/6425690141126096319'/><link rel='alternate' type='text/html' href='http://blog.dedico.pl/2012/01/instalacja-gemow-bez-dokumentacji-na.html' title='Instalacja gem&apos;ów bez dokumentacji na Ubuntu'/><author><name>Marek Stachura</name><uri>https://profiles.google.com/115128213385160128203</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-A8167LY6Mek/AAAAAAAAAAI/AAAAAAAADSk/umCsBVfEmUU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-414964416092643798.post-2986309813778137891</id><published>2011-06-18T11:59:00.000+02:00</published><updated>2011-06-18T11:59:55.855+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='solr'/><category scheme='http://www.blogger.com/atom/ns#' term='lucene'/><category scheme='http://www.blogger.com/atom/ns#' term='jetty'/><category scheme='http://www.blogger.com/atom/ns#' term='sunspot'/><title type='text'>Zabezpieczenie jetty</title><content type='html'>W mojej aplikacji Ruby on Rails używam gema &lt;a href="http://outoftime.github.com/sunspot/"&gt;Sunspot&lt;/a&gt;, który to używa &lt;a href="https://github.com/mwmitchell/rsolr"&gt;RSolr&lt;/a&gt; do komunikacji z serwerem &lt;a href="http://lucene.apache.org/solr/"&gt;Solr&lt;/a&gt;. &lt;a href="http://lucene.apache.org/solr/"&gt;Solr&lt;/a&gt; to serwer bazujący na indeksie &lt;a href="http://lucene.apache.org/"&gt;Lucene&lt;/a&gt;, który świetnie nadaje się do wyszukiwania pełnotekstowego.&lt;br /&gt;Domyślna instalacja Sunspot posiada kopię Solr'a, którą można uruchomić na &lt;a href="http://jetty.codehaus.org/jetty/"&gt;jetty&lt;/a&gt;. &lt;a href="http://jetty.codehaus.org/jetty/"&gt;Jetty&lt;/a&gt; domyślnie uruchamia się na porcie 8983 i można podglądnąć sobie panel administracyjny Solr'a wchodząc na adres: http://localhost:8983/solr/admin/&lt;br /&gt;&lt;br /&gt;Wszystko fajnie gdy pracuje się na localhost, jednak na serwerze produkcyjnym nie jest mile widziane aby każdy miał dostęp do wspomnianego panelu.&lt;br /&gt;&lt;br /&gt;Najpierw próbowałem zabezpieczyć port 8983 dla ruchu z poza mojego serwera, chciałem użyć do tego &lt;a href="https://wiki.ubuntu.com/UncomplicatedFirewall"&gt;ufw&lt;/a&gt; niestety moje zdolności administratorskie nie są na tyle dobre aby to poprawnie skonfigurować.&lt;br /&gt;&lt;br /&gt;Następnie zastanawiałem się czy jest możliwość konfiguracji &lt;a href="http://jetty.codehaus.org/jetty/"&gt;jetty&lt;/a&gt;, aby odpowiadała tylko dla zapytań z konkretnego hosta. Okazało się, że można to skonfigurować, oto instrukcja:&lt;br /&gt;&lt;br /&gt;1. w pliku konfiguracyjnym jetty jetty.xml - w moim przypadku ścieżka to: &lt;br /&gt;&lt;script src="https://gist.github.com/1032143.js"&gt; &lt;/script&gt;&lt;br /&gt;odnaleźć fragment:&lt;br /&gt;&lt;script src="https://gist.github.com/1032148.js"&gt; &lt;/script&gt;&lt;br /&gt;2. dodać następującą linię&lt;br /&gt;&lt;script src="https://gist.github.com/1032151.js"&gt; &lt;/script&gt;&lt;br /&gt;przed linią&lt;br /&gt;&lt;script src="https://gist.github.com/1032152.js"&gt; &lt;/script&gt;&lt;br /&gt;3. zrestartować serwer jetty i nasz panel solr powinien już być zabezpieczony.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/414964416092643798-2986309813778137891?l=blog.dedico.pl' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.dedico.pl/feeds/2986309813778137891/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://blog.dedico.pl/2011/06/zabezpieczenie-jetty.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/414964416092643798/posts/default/2986309813778137891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/414964416092643798/posts/default/2986309813778137891'/><link rel='alternate' type='text/html' href='http://blog.dedico.pl/2011/06/zabezpieczenie-jetty.html' title='Zabezpieczenie jetty'/><author><name>Marek Stachura</name><uri>https://profiles.google.com/115128213385160128203</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-A8167LY6Mek/AAAAAAAAAAI/AAAAAAAADSk/umCsBVfEmUU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-414964416092643798.post-8325817532316748274</id><published>2011-06-17T21:22:00.002+02:00</published><updated>2011-06-17T21:25:42.577+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='whenever'/><category scheme='http://www.blogger.com/atom/ns#' term='backup'/><category scheme='http://www.blogger.com/atom/ns#' term='cron'/><category scheme='http://www.blogger.com/atom/ns#' term='crontab'/><title type='text'>whenever - zarządzaj crontab za pomocą Ruby</title><content type='html'>Zgodnie z obietnicą opiszę jak skonfigurować crontab za pomocą gem'a &lt;a href="https://github.com/javan/whenever"&gt;whenever&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;W poprzednim &lt;a href="http://blog.dedico.pl/2011/03/amazon-s3-i-backup.html"&gt;poście&lt;/a&gt; mowa była jak utworzyć backup bazy MySql za pomocą gem'a &lt;a href="https://github.com/meskyanichi/backup/"&gt;backup&lt;/a&gt; i wysłać go do &lt;a href="http://aws.amazon.com/s3/"&gt;Amazon S3&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Przydałoby się zautomatyzować ten proces aby wykonywał się przynajmniej raz dziennie.&lt;br /&gt;&lt;br /&gt;Oto jak można to zrobić za pomocą gem'a &lt;a href="https://github.com/javan/whenever"&gt;whenever&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Pominę proces instalacji, gdyż jest to bardzo dobrze opisane na stronie &lt;a href="https://github.com/javan/whenever"&gt;projektu&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Po komendzie &lt;b&gt;&lt;i&gt;wheneverize .&lt;/i&gt;&lt;/b&gt; został utworzony plik &lt;b&gt;config/schedule.rb&lt;/b&gt;, w tym pliku należy wpisać własne zadania, które chcemy wykonać na naszym serwerze.&lt;br /&gt;&lt;br /&gt;Moim celem było utworzenie taska, który będzie wykonywał się codziennie i który będzie wywoływał komendę:&lt;br /&gt;&lt;p&gt;&lt;script src="https://gist.github.com/943959.js?file=perform"&gt;&lt;/script&gt;&lt;br /&gt;&lt;/p&gt;Zgodnie z dokumentacją napisałem coś takiego:&lt;br /&gt;&lt;p&gt;&lt;script src="https://gist.github.com/1032068.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;/p&gt;Jeśli używamy domyślnego pliku konfiguracyjnego dla gem backup, to możemy w komendzie pominąć paramter -c oraz ścieżkę do pliku, można jednak wskazać konkretny plik, gdzie mamy zdefiniowany nasz &lt;b&gt;Backup::Model test_backup&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Po wrzuceniu tego na serwer okazało się, że cron nie rozumie polecenia backup. Trzeba było odpowiednio ustawić zmienną PATH, poniżej jeszcze raz plik schedule.rb wraz z dodatkowymi ustawieniami:&lt;br /&gt;&lt;p&gt;&lt;script src="https://gist.github.com/1032075.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;Cron po każdym uruchomieniu taska wyśle podsumowanie na adres email, który został ustawiony w zmiennej :MAILTO. &lt;br /&gt;&lt;br /&gt;To wszystko. Cron działa, backup się wykonuje. Bardzo podoba mi się, to, że taski cron są zdefiniowane wraz z projektem Rails. Jeśli używa się &lt;a href="https://github.com/halorgium/capistrano"&gt;capistrano&lt;/a&gt; do deployment'u to warto dodać do pliku deploy.rb task, który będzie aktualizował crontab po każdym wypuszczeniu nowej wersji aplikacji:&lt;br /&gt;&lt;p&gt;&lt;script src="https://gist.github.com/1032097.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/414964416092643798-8325817532316748274?l=blog.dedico.pl' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.dedico.pl/feeds/8325817532316748274/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://blog.dedico.pl/2011/06/whenever-zarzadzaj-crontab-za-pomoca.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/414964416092643798/posts/default/8325817532316748274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/414964416092643798/posts/default/8325817532316748274'/><link rel='alternate' type='text/html' href='http://blog.dedico.pl/2011/06/whenever-zarzadzaj-crontab-za-pomoca.html' title='whenever - zarządzaj crontab za pomocą Ruby'/><author><name>Marek Stachura</name><uri>https://profiles.google.com/115128213385160128203</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-A8167LY6Mek/AAAAAAAAAAI/AAAAAAAADSk/umCsBVfEmUU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-414964416092643798.post-2552676532603851606</id><published>2011-03-12T00:59:00.010+01:00</published><updated>2011-06-17T21:23:39.488+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='backup'/><category scheme='http://www.blogger.com/atom/ns#' term='amazon'/><title type='text'>Amazon S3 i backup</title><content type='html'>Dzięki &lt;a href="http://ruby5.envylabs.com/episodes/160-episode-157-march-11-2011"&gt;Ruby5&lt;/a&gt; ponownie znalazłem fajne narzędzie, tym razem do robienia backup'ów.&lt;br /&gt;&lt;br /&gt;Gem &lt;a href="https://github.com/meskyanichi/backup"&gt;backup&lt;/a&gt; ma za zadanie robić backup'y (bazy danych, plików) i wysyłać je tam gdzie sobie tego zażyczymy (ftp, Amazon S3, itd).&lt;br /&gt;&lt;br /&gt;Spodobała mi się opcja wysyłania backup'u bazy MySql na Amazon S3. &lt;br /&gt;Nigdy wcześniej nie korzystałem z Amazon S3, można tam założyć konto, które będzie darmowe do momentu gdy miesięcznie nie przekroczy się następujących parametrów:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;5 GB of Amazon S3 storage&lt;/li&gt;&lt;li&gt;20 000 Get Requests&lt;/li&gt;&lt;li&gt;2 000 Put Requests&lt;/li&gt;&lt;/ul&gt;Sądzę, że na początek to w zupełności wystarczy.&lt;br /&gt;Więcej info odnośnie darmowego serwisu Amazon: &lt;a href="http://aws.amazon.com/free/"&gt;AWS free&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;OK, mamy konto S3, należałoby utworzyć jakiś bucket na S3 - należy zalogować się do &lt;br /&gt;&lt;a href="https://console.aws.amazon.com/s3/"&gt;https://console.aws.amazon.com&lt;/a&gt; - nazwę naszego bucket'a ustawiamy na 'test'.&lt;br /&gt;&lt;br /&gt;Potrzebujemy jeszcze access_key_id oraz secret_access_key, są do pobrania z:&lt;br /&gt;&lt;a href="https://aws-portal.amazon.com/gp/aws/developer/account/index.html?ie=UTF8&amp;action=access-key"&gt;https://aws-portal.amazon.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Teraz czas na gema backup, instalacja:&lt;br /&gt;&lt;div&gt;&lt;p&gt;&lt;script src="https://gist.github.com/943962.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;Generujemy domyślny plik konfiguracyjny:&lt;br /&gt;&lt;div&gt;&lt;p&gt;&lt;script src="https://gist.github.com/943963.js?file=generate"&gt;&lt;/script&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;Należy dostosować plik konfiguracyjny (domyślnie w ~/Backup/config.rb) do naszych potrzeb: nazwa bazy, użytkownika i hasło oraz nazwa regionu Amazon, ja wybrałem Europę - stąd wartość dla s3.region = 'eu-west-1'&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;p&gt;&lt;script src="https://gist.github.com/943956.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;Teraz możemy wykonać backup bazy:&lt;br /&gt;&lt;div&gt;&lt;p&gt;&lt;script src="https://gist.github.com/943959.js?file=perform"&gt;&lt;/script&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;...i mamy zrobiony backup!&lt;br /&gt;&lt;br /&gt;W kolejnym &lt;a href="http://blog.dedico.pl/2011/06/whenever-zarzadzaj-crontab-za-pomoca.html"&gt;poście&lt;/a&gt; postaram się opisać automatyzację tego rozwiązania za pomocą gema &lt;a href="https://github.com/javan/whenever"&gt;whenever&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/414964416092643798-2552676532603851606?l=blog.dedico.pl' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.dedico.pl/feeds/2552676532603851606/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://blog.dedico.pl/2011/03/amazon-s3-i-backup.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/414964416092643798/posts/default/2552676532603851606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/414964416092643798/posts/default/2552676532603851606'/><link rel='alternate' type='text/html' href='http://blog.dedico.pl/2011/03/amazon-s3-i-backup.html' title='Amazon S3 i backup'/><author><name>Marek Stachura</name><uri>https://profiles.google.com/115128213385160128203</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-A8167LY6Mek/AAAAAAAAAAI/AAAAAAAADSk/umCsBVfEmUU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-414964416092643798.post-6070111029636179530</id><published>2011-03-07T21:05:00.004+01:00</published><updated>2011-03-13T09:37:09.231+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='paperclip'/><title type='text'>Upgrade do Rails 3.0.5 paperclip i ... gdzie są moje zdjęcia?!?!</title><content type='html'>Tak jak zalecano zrobiłem upgrade na produkcji do Rails 3.0.5. Po wgraniu nowej wersji oraz po komendzie:&lt;br /&gt;bundle update&lt;br /&gt;gem'y rails zostały zaktualizowane.&lt;br /&gt;Aplikacja (&lt;a title="Wyszukiwarka noclegów" href="http://holidio.pl"&gt;holidio&lt;/a&gt;) śmiga, jednak zauważyłem, że niestety nie wyświetlają się zdjęcia, które zostały wgrane za pomocą paperclip... &lt;br /&gt;Hmm, nie zastanawiając się zbyt długo zrobiłem szybki rollback (dobrze, że korzystam z capistrano):&lt;br /&gt;cap deploy:rollback&lt;br /&gt;To przywróciło aplikację do poprzedniej wersji a mi dało trochę czasu na zastanowienie się co poszło nie tak...&lt;br /&gt;&lt;br /&gt;Przypomniało mi się, że słuchając jednego z ostatnich podcastów &lt;a href="http://ruby5.envylabs.com/episodes/157-episode-154-march-1-2011#story-1"&gt;Ruby5&lt;/a&gt; chłopaki wspominali, że w Rails 3.0.5 poprawiono "pluralizację" oraz, że m.in. od teraz np. "media" w liczbie mnogiej dalej pozostaną "media", a nie jak to było wcześniej "medias"...&lt;br /&gt;Ale co to ma wspólnego z moją aplikacją?&lt;br /&gt;Ano ma, &lt;a href="https://github.com/thoughtbot/paperclip"&gt;paperclip&lt;/a&gt; domyślnie używa katalogu "data" dla załączników. Ja potrzebowałem wielu załączników (zdjęć) do mojego modelu, więc załączniki te zostały zapisane w folderze "datas" (zła odmiana w liczbie mnogiej).&lt;br /&gt;Po upgrade do Rails 3.0.5 aplikacja szukała zdjęć w katalogu "data"... a takiego folderu niestety nie miałem na serwerze... Aby to naprawić wystarczyło zmienić nazwę folderu z "datas" na "data" i sprawa załatwiona.&lt;br /&gt;Gdybym potrzebował jednak utrzymać starą nazwę folderu, można przekazać &lt;a href="https://github.com/thoughtbot/paperclip"&gt;paperclip&lt;/a&gt; parametr :path i dowolnie ustawić jego wartość.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/414964416092643798-6070111029636179530?l=blog.dedico.pl' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.dedico.pl/feeds/6070111029636179530/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://blog.dedico.pl/2011/03/upgrade-do-rails-305-paperclip-i-gdzie.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/414964416092643798/posts/default/6070111029636179530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/414964416092643798/posts/default/6070111029636179530'/><link rel='alternate' type='text/html' href='http://blog.dedico.pl/2011/03/upgrade-do-rails-305-paperclip-i-gdzie.html' title='Upgrade do Rails 3.0.5 paperclip i ... gdzie są moje zdjęcia?!?!'/><author><name>Marek Stachura</name><uri>https://profiles.google.com/115128213385160128203</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-A8167LY6Mek/AAAAAAAAAAI/AAAAAAAADSk/umCsBVfEmUU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-414964416092643798.post-8800679157279438900</id><published>2011-03-05T15:20:00.002+01:00</published><updated>2011-03-13T09:36:30.608+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><title type='text'>Couldn't parse YAML at line - po update RubyGems do wersji 1.6.1</title><content type='html'>Wygląda na to, że połączenie Ruby 1.9.2 oraz najnowszej wersji RubyGems 1.6.1 domyślnie używa 'psych' jako parsera plików YAML...&lt;br /&gt;&lt;br /&gt;Mi nie udało się zainstalować gem'a 'psych', więc trzeba było ustawić inny domyślny parser dla aplikacji.&lt;br /&gt;&lt;br /&gt;W pliku boot.rb dodałem następujące linie:&lt;br /&gt;&lt;pre&gt;require 'yaml'&lt;br /&gt;YAML::ENGINE.yamler = 'syck'&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/414964416092643798-8800679157279438900?l=blog.dedico.pl' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.dedico.pl/feeds/8800679157279438900/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://blog.dedico.pl/2011/03/couldnt-parse-yaml-at-line-po-update.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/414964416092643798/posts/default/8800679157279438900'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/414964416092643798/posts/default/8800679157279438900'/><link rel='alternate' type='text/html' href='http://blog.dedico.pl/2011/03/couldnt-parse-yaml-at-line-po-update.html' title='Couldn&apos;t parse YAML at line - po update RubyGems do wersji 1.6.1'/><author><name>Marek Stachura</name><uri>https://profiles.google.com/115128213385160128203</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-A8167LY6Mek/AAAAAAAAAAI/AAAAAAAADSk/umCsBVfEmUU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-414964416092643798.post-3237269863486975191</id><published>2011-02-21T21:06:00.000+01:00</published><updated>2011-02-21T21:06:21.458+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><title type='text'>Can't find gem rake (["&gt;= 0"])</title><content type='html'>Dotyczy prawdopodobnie tylko Ruby 1.9.2 na Windows. U mnie problem zaczął się po próbie instalacji gem'a radiant (cms), który, wygląda na to, że niestety jeszcze nie działa pod Ruby 1.9.2.&lt;br /&gt;&lt;br /&gt;Wystarczyło usunąć plik "rake.gemspec" z folderu:&lt;br /&gt;C:\Ruby192\lib\ruby\gems\1.9.1\specifications&lt;br /&gt;To załatwiło sprawę.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/414964416092643798-3237269863486975191?l=blog.dedico.pl' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.dedico.pl/feeds/3237269863486975191/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://blog.dedico.pl/2011/02/cant-find-gem-rake-0.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/414964416092643798/posts/default/3237269863486975191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/414964416092643798/posts/default/3237269863486975191'/><link rel='alternate' type='text/html' href='http://blog.dedico.pl/2011/02/cant-find-gem-rake-0.html' title='Can&apos;t find gem rake ([&quot;&gt;= 0&quot;])'/><author><name>Marek Stachura</name><uri>https://profiles.google.com/115128213385160128203</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-A8167LY6Mek/AAAAAAAAAAI/AAAAAAAADSk/umCsBVfEmUU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry></feed>
