//DEVGURU

Archives: July, 2008

Import ticketów do Trac-a z pomocą Ruby, część 2

Tuesday, July 22nd, 2008

Jest to uaktualnienie pomysłu Wiktora na automatyczny i masowy import ticketów do Trac-a. Dla przypomnienia: założenie jest takie, że tickety mamy w pliku tekstowym, gdzie jedna linia = jeden ticket.

Nazwy pól formularza dodawania nowego ticketu zostały zmienione w obecnej wersji Trac-a (0.11), dlatego też trzeba było uaktualinić je również w skrypcie. Przy okazji skrypt został przekształcony w rake task, do którego parametry podaje się z linii poleceń.

Kod pliku znajduje się na pastie.

Użycie:

rake trac:import url=http://path.to.svn/trac.cgi/login user=username
  pass=password owner=username file=tickets.txt

url – adres URL strony logowania do Trac-a
user i pass – dane konta do logowania
owner – komu przypisać ticket
file – plik z ticketami (jedna linia = jeden ticket)

W razie potrzeb łatwo zedytować plik dopisując dodatkowe pola do wypełnienia w formularzu.

Kod korzysta z gema Mechanize. Instalacja: gem install mechanize.

Zaczynamy z Ruby on Rails

Friday, July 18th, 2008

Nikt nie rodzi się ze znajomością języków programowania i frameworków ( :-P ).

Również nie wszyscy w netguru zaczynali pracę znając Ruby on Rails. Większość z nas nauczyła/uczy się tego frameworka dopiero w firmie. Jako, że problemy i pytania na które napotyka początkujący RoRowiec są często takie same, postanowiliśmy stworzyć jedno miejsce gdzie każdy początkujący znajdzie niektóre z odpowiedzi…

Tak właśnie powstało “Getting started with RoR“.

Pomyśleliśmy, że może komuś też taka wiedza się przyda, więc udostępniamy :-) SMACZNEGO

Sphinx, a sprawa polska

Friday, July 18th, 2008

Jak pierwszy raz dodawałem wyszukiwarkę do aplikacji Railsowej, to wybór był prosty, bo właściwie nie było żadnego – acts_as_ferret. W pierwszej chwili byłem bardzo mile zaskoczony, bowiem korzysta się z tego niezwykle prosto, można indeksować nie tylko pola znajdujące się w bazie, ale również wyniki wywołania metod modelu, indeksowanie odbywa się na żywo. Super sprawa.

Jakiś czas później jednak zaczęły się schody – indeksowanie na żywo po pewnym czasie generowało błędne wyniki, poważnie zwalniało operacje na większej ilości danych (konieczność przeindeksowania po każdej zmianie), a na koniec na serwerze produkcyjnym ferret w pewnym momencie całkowicie odmówił współpracy, sypiąc jakimiś błędami, o których developerzy wiedzą, ale nie mogą ich powtórzyć, a co za tym idzie, naprawić.

Szczęśliwie wtedy już sytuacja na polu wyszukiwania w Railsach nie była już taka jednoznaczna. Poza Ferretem był również javowski Solr (którego można używać za pomocą acts_as_solr) i rosyjski Sphinx. Zdecydowałem się na tego ostatniego i okazało się to potem świetną decyzją. Ma niesamowite tempo indeksowania – zbiory, których indeksowanie przez Ferreta nie zmieściłoby się w ośmiogodzinnym dniu pracy były trawione w kilka minut. Oczywiście, są też pewne minusy – brak indeksowania na żywo (podobno do obejścia przez zastosowanie delta indeksów, ja nie miałem jak dotąd takiej potrzeby), wydłużony czas indeksowania jeśli chcemy później przeszukiwać z użyciem infiksów i prefiksów (lecz nadal o wiele szybszy niż w przypadku Ferreta) i brak możliwości indeksowania treści, które nie znajdują się bezpośrednio w bazie.

Sphinxa łatwo zintegrujemy z aplikacją korzystając z jednego z dwóch sprawdzonych przeze mnie pluginów – Thinking Sphinx i Ultrasphinx. Ten pierwszy jest prostszy w konfiguracji, wygodniejszy w użyciu, ale Ultrasphinx posiada większe możliwości i jest tym pluginem, którego nalezy użyć jeśli posiada się nietypowo umieszczone dane w bazie (jako, że pozwala na pisanie własnych zapytań SQL do wyciągania danych).

Przy podłączaniu Sphinxa do Railsowej aplikacji jest jedna rzecz, która sprawiała problemy – reprezentacja polskich znaków. Baza jest w UTF-8, ale znając lenistwo niektórych przy wpisywaniu polskich znaków chcielibyśmy, aby frazy wyszukiwania ‘Zażółć gęślą jaźń’ i ‘zazOlC gesLA jazN’ dawały te same wyniki. Należy wtedy dokonać drobnej manipulacji zmienną charset_table w pliku konfiguracyjnym Sphinxa. W moim przypadku przyjęła ona taką postać.

Jest to zapożyczenie wzbogacone przeze mnie o niektóre brakujące polskie znaki diakrytyczne. Dane z bazy są sprowadzane do zbioru małych liter alfabetu łacińskiego i takoż indeksowane. Jeśli komuś brakuje jakiegoś znaku wśród tych reguł, to warto skorzystać z wyszukiwarki znaków i znaleziony tam kod dodać do pliku konfiguracyjnego.