Sep 3 2010

Recenzja książki “Enterprise Rails”

Od dłuższego czasu patrząc najpierw na plany wydawnicze, potem na nowości – natykałem się na dość ciekawy tytył: “Rails. Projektowanie systemów klasy eneterprise”

Ciekawy, bo jestem natywnym programistą Java, który kojarzony jest właśnie z enterprise.
Mimo ciekawości powstrzymywałem się od zakupu tej książki, z kilku powodów. Po pierwsze oryginalna wersja została opublikowana w 2008 roku więc jest już dość leciwa biorąc pod uwagę szybkość rozwijania się frameworka Rails. Po drugie lada dzień wspomniany framework zostanie opublikowany w wersji 3.0, który wprowadza wiele rewolucyjnych zmian. Bałem się po prostu, że książka ta stanie się nieaktualna już w momencie zakupu.
Szczęśliwym trafem stałem się posiadaczem kupony, który musiałem zrealizować w jednej z trójmiejskich księgarni danego dnia. Będąc jednak w środku zupełnie nie byłem zachwycony zawartością półki (a raczej półeczki) opatrzonej tabliczką “Informatyka”. Większość tytułów to były podręczniki szkolne, które jak na razie jeszcze mnie nie interesują (zainteresują jak dzieciaki pójdą do szkoły :) ). Jedyną pozycją nadającą się do kupna był wymieniony wyżej tytuł. Nie mając większego wyboru kupiłem tą książkę.
Obawy co do nieważności książki były tak duże, że o mało co, nie wylądowała na półce bez czytania. No ale skoro książka już jest to chociaż pierwszy rozdział… i tak już do końca.

Moje obawy stały się w pełni niesłuszne. Książka porusza problemy “okołoprogramistyczne” i jeżeli już w niej natkniemy się na fragmenty kodu, to łatwo go zaadaptować do nowej wersji Rails. Co więcej – po przeczytaniu książka awansowała w moim osobistym rankingu z “książki do starych wersji, częściowo nieaktualne” do “książki, które powinny być pod ręką albo w pamięci”.
Lektura tej książki dostarczyła mi bardzo dużo przydatnych informacji. Co w środku:

Pierwszą rzeczą, której nauczyłem się z książki było pisanie nowych funkcjonalności i wprowadzenie ich do projektu w postaci gemów. Nie ukrywam, że jestem początkującym programistą Ruby’ego i ten rozdział przyniósł mi dużo wiedzy na ten temat. Niezamierzenie przez autora przyniósł mi także sporo wiedzy o Ruby reflection.

Kolejnym tematem w książce są bazy danych i ich optymalizacja. Poruszane jest tu na prawdę dużo ciekawych tematów, walidacja na poziomie baz danych, normalizacja, triggery, korzystanie z “widoków bazodanowych” w aplikacji. Opisane jest także dziedziczenie wielotabelarczyne, które dostarczyło całkiem nowe spojrzenie na railsy. Wiele razy spotkałem się z problemem, które zdają się błahe po przeczytaniu tego rozdziału. Myślę, że dla samego opisu dziedziczenia wielotabelarycznego warto zaopatrzyć się w tą pozycję.

Kolejne rozdziały opisują webservices i jak z nich korzystać efektywnie, oraz problemy cache’owania aplikacji.

Myślę, że książka ta powinna znaleźć się na półce każdego programisty Rails. Mimo, że na wiek książki nie wszystkie (jednak..) informacje są aktualne, jest ich na prawdę niewiele. Reszta w całości lub w części może być śmiało zastosowana w naszym projekcie, aby zwiększyć jego bezpieczeństwo lub optymalne działanie.

  • Wykop
  • Blip
  • Twitter
  • Facebook
  • DZone
  • Digg
  • Blinklist
  • Delicious
  • Evernote
  • LinkedIn
  • Google Bookmarks
  • Google Buzz
  • Google Reader
  • Share/Bookmark

Aug 25 2010

Vim on Rails

Ostatnio natrafiłem na screencast Ben Orenstein’a jak używać Vima do programowania w rails. Screencast ma 36 minut i został podzielnony, na kilka części:

  1. Podstawy efektywnego programowania
  2. opis pluginu rails.vim
  3. Opis pluginu Snipmate
  4. Tags, i ich efektywne wykorzystanie
  5. kilka słów o wyszukiwaniu
  6. jak edytować jeszcze szybciej

Wg mnie screencast powinien być obejrzany zaraz po podstawowej nauce Vima. Filmik jest dobrze nakręcony i dobrze pokazuje jak programować w railsach za pomocą tego edytora.

W związku, że vim jest coraz częściej wykorzystywany do pracy z rails, (sam Yehuda Katz przesiadł się na ten edytor) warto poświęcić te kilka dolarów aby zapoznać się z tym narzędziem.

Good work Ben!
It’s worth to spend few bucks to watch that great screencast. We can learn how to use this efficient editor for more efficient productivity with rails development.

Thanks A lot.

Dziękuję autorowi za udostępnienie screencasta.

  • Wykop
  • Blip
  • Twitter
  • Facebook
  • DZone
  • Digg
  • Blinklist
  • Delicious
  • Evernote
  • LinkedIn
  • Google Bookmarks
  • Google Buzz
  • Google Reader
  • Share/Bookmark

Aug 25 2010

Najlepszy edytor do Rails (czyli dlaczego Vim a nie Textmate)

Patrząc na te wszystkie screencasty pokakzujące programowanie w ruby on rails zauważyć można że, wsród edytorów prym wiedzie Textmate. Czy jest on jednak aż tak produktywny do wytwarzania aplikacji? Sprawdźmy.

Najpierw przeanalizujmy jakie narzędzia mamy do wyboru:
- Netbeans,
- Rubymine,
- Aptana,
- Textmate,
- Emacs,
- Vim,
- Redcar.

Nie znam innych narzędzi, które są wykorzystywane do tworzenia aplikacji w rails wśród moich znajomych.

Pierwsze trzy to typowe IDE z podpowiadaniem składni, debuggerami i innymi dodatkami. Można powiedzieć, że jest to wyższa klasa niż pozostałe. Nie będę porównywał który z nich jest lepszy. Napiszę tylko, że z pośród tych wszystkich zalet, które ze sobą niosą, mają jedną ale bardzo znaczną wadę. Nie wspierają wersji języka, czy też frameworku, dopóki autor edytora go nie zaimplementuje. Więc czasami musimy walczyć walkę z narzędziem a nie z samym frameworkiem.

Spójrzmy na pozostałem 4 edytory. Zacznijmy od ostatniego: redcar – dość ciekawa propozycja napisana w jruby, czyli międzyplatformowa. Niestety nadal jest w fazie alfa więc na razie nie ma co sobie głowy zawracać tym produktem. Poza tym jako jeden z głównych Feature’s wymieniana jest zgodność z bundlami Textmate’a. Czy to aż taka zaleta?

Pozostają 3. Znam Zarówno Emacsa jak i Vima, jednak ten drugi jest popularniejszy. Mają zbliżone funkcjonalności jednak Vima łatwiej rozszerzać o własne funkcje. Poza tym emacs ma 2,9mln wyników w google a Vim ponad 11mln – więc emacsem nie będziemy się zajmować.

Doszedłem do etapu, który sowicie zaplanowałem, porównanie Vim z Textmate. Sprawdźmy ze strony Textmate Główne cechy tego edytora i porównajmy go do VIma.:

Ability to Search and Replace in a Project

Sic! bzdura aby wypisywać coś takiego jako feature, nawet windowsowy notatnik coś takiego potrafi. Aby nie było – Vim także potrafi. Potrafi szukać w górę, w dół, wyszukuje zgodnie z regexpem.

Auto-Indent for Common Actions Like Pasting Text

Hm, ciekawe, w Vim proszę ustawić :set autoindent i po sprawie mamy to samo.

Auto-Pairing of Brackets and Other Characters

Dla przypomnienia z nauki Vima: % - przenosi na parujący znak. Czyli vim też to ma.

Clipboard History

Ha! Vim nawet ma tzw. nazwane rejestry gdzie możemy decydować do którego rejestru kopiujemy i z którego wklejamy. Historię też ma.

Column Selections and Column Typing

Mamy, mamy. Podstawowy vi tego nie ma, ale Vim wprowadza tryb wizualny, gdzie możemy zaznaczać tekst blokowo i pisać w kilku linijkach to samo.

Completion of Words from Current Document

Vim ma nie tylko autouzupełnianie z obecnego dokumentu, ale i z zewnętrznych, z historii, wklejanie całych linijek z obecnego dokumentu i trochę więcej.

Declarative Language Grammars for Graceful Mixing and Hacking

Vim potrafi sam rozpoznać, który syntax wykorzystywać po rozszerzeniu pliku. Dodatkowo, można w pliku konfiguracyjnym włączać lub wyłączać odpowiednie pluginy przy edycji poszczególnych plików.

Dynamic Outline for Working With Multiple Files

No dobra, Textmate w wbudowany drawer, w którym widać całe drzewko plików projektu. Vim tego nie ma, ale ma plugin NerdTree, który dodaje tą funkcjonalność.

Expand Trigger Words to Code Blocks With Tab-able Placeholders

Vim też tak ma, co prawda wbudowana werjsa :ab jest dośc uboga, ale pluginami takimi jak “sniepty” można już dużo zrobić.

File Tabs when Working With Projects

Vim has tabs. Dodatkowo może obszar zakładki podzielić na kilka części (bufery) i w każdej z nich edytować inny plik. Jeżeli zakładek i buferów zabraknie można otworzyć nowe okno.

Foldable Code Blocks

Vim posiada foldowanie zależne od rodzaju tekstu(np. kod), od wcięć, od markerów, różnic w pliku lub ustawiane ręcznie.

Function Pop-up for Quick Overview and Navigation

No dobra nie znalazłem popapu dla wyjaśnienia funkcji, ale korzystając z systemowej funkcji unixowej funkcji ctags możemy otworzyć wyjaśnienie funkcji w nowym buferze.

Plug-able Through Your Favorite Scripting Language

Vim has looooooots of plugins. Nie potrafię nawet obejżeć i przetestować ich wszystkich. Vim udostępnił wspaniałą architekturę do budowania pluginów i powstaje ich cała masa.

Recordable Macros With No Programming Required

Nie korzystałem z makr w Vimie, ale są.

Regular Expression Search and Replace (grep)

Wspomniano wyżej, jest coś takego w Vimi’e

Run Shell Commands from Within a Document

Może to zabrzmi dziwnie, ale Vim także to potrafi. Potrafi wykonać komendę, przełączyć się na chwilę do shella , może wkleić wynik shellowej komendy do dokumentu, a nawet potrafi zaznaczony fragment tekstu wrzucić jako argument komendy shellowej i wkleić zwrócony wynik.

Support for Darcs, Perforce, SVK, and Subversion

Vim nie ma wbudowanej obsługi SCM, ale można to rozbudować pluginami albo bezpośrednio uruchamianymi komendami shella.

Support for More Than 50 Languages

Vim posiada prawie 3200 pluginów wierzę, że wspiera więcej niż 50 języków.

Switch Between Files in Projects With a Minimum of Key Strokes

Z pluginem rails.vim łatwo się przełączać pomiędzy Modelem, Helperem, Controllerem, Widokiem i plikami testów. bardzo łatwo.

Themable Syntax Highlight Colors

Wow! bomba, w sumie jak by poszukać, to Vim też ma kilka schematów kolorów.

Visual Bookmarks to Jump Between Places in a File

W vimie nazywają się to Tagi.

Works As External Editor for (s)ftp Programs

Też tak potrafię, edycja przez sftp, scp. W którymś z kolejnym artykułów napiszę jak to zrobić.

Works Together With Xcode and Can Build Xcode Projects

Who cares about it! Nie ma to jak dobra reklama XCode. IMO XCode jest wyśmienitym edytorem Objective-C, do innych języków też się nadaje ale słabiej. Wg mnie to żadna zaleta, że potrafi budować projekty XCode przy odrobinie zaparcie idzie coś takiego zrobić applescriptem, pytanie tylko : Po co?

Co więcej?
Textmate pracuje tylko w systemie MacOS, Vim praktycznie na każdej platformie.
Textmate jest płatny i nie jest wspierany od dwóch lat.
Textmate ma bundle, które ułatwiają edytować kod. Vim ma snipety, które robią to samo.
Textmate jest ładny. Vim dla niektórych też. :)
“Jeżeli mam Textmate’a to znaczy że mam Mac’a i jestem cool”. Też mam Maca, a Textmate’a wywaliłem po dwóch dniach użytkowania.

Reasumując.

Wg mnie Textmate nie ma nic, co może mieć Vim. Za tym drugim stoi także dość spore community. I długie doświadczenie w realizacji projektu. Vim ma jeszcze jedną zaletę, jest wszędzie. Jeżeli jesteśmy nie tylko programistami ale trochę administratorami, to gdziekolwiek sie nie zalogujemy to vim prawdopodobnie tam będzie. Użytkownicy Textmate’a muszą się w takich sytuacjach uczyć drugiego edytora, aby poprawić zdalnie plik. Vim’owcy nie muszą.

Zatem kiedy możemy chcieć programować w Textmate:
- …myślę…
- …myślę…
- gdy… chcemy nakręcić screencasta i chcemy aby wyglądał jak tysiąc innych(musimy wtedy także zmienić tapetę na domyślną)
- gdy wchodzimy do zespołu gdzie inni z tego edytora korzystają.
- gdy mamy ochotę wydać 50Euro za coś co mamy za darmo od 1976 roku.
W innych przypadkach zalecam korzystanie z Vima. A jak skutecznie z niego korzystać przedstawię w jednym z kolejnych artykułów.

PS. Bez urazy ale jakbym miał wydawać tyle kasy to wolałbym dołożyć 42Euro i kupić rubymine’a. Niby prawie dwa razy więcej kasy, ale 5 razy więcej możliwości.

  • Wykop
  • Blip
  • Twitter
  • Facebook
  • DZone
  • Digg
  • Blinklist
  • Delicious
  • Evernote
  • LinkedIn
  • Google Bookmarks
  • Google Buzz
  • Google Reader
  • Share/Bookmark

Aug 7 2010

Capture model w Pickle

Używam Machinist i Pickle jako wspaniałe dodatki do Cucumbera uzupełniające jego możliwości. Wczoraj jednak natrafiłem na dziwny problem: jeden ze stepów wykonywał się w jednym teście a w drugim nie. Nie rozpoznawało modelu, który wygenerowałem – tylko jednego, wszystkie inne rozpoznawało.

Problemem był Pickle. Okazuje się, że capture_model rozpoznaje modele po zdefiniowanych fabrykach lub blueprintach a nie po bazie danych, czy schemie. Po stworzeniu blueprinta dla mojego modelu wszystko zaczęło działać ponownie.

  • Wykop
  • Blip
  • Twitter
  • Facebook
  • DZone
  • Digg
  • Blinklist
  • Delicious
  • Evernote
  • LinkedIn
  • Google Bookmarks
  • Google Buzz
  • Google Reader
  • Share/Bookmark

Jul 29 2010

Routing w Rails 3, nowości

Jednym z ważniejszych plików konfiguracyjnych aplikacji napisanej w Ruby on Rails jest plik routes.rb. Plik zawiera mapowania do wszystkich zasobów aplikacji, aby były (lub nie były) dostępne przez URL. W rails 3 wprowadzono sporo zmian w tej kwestii, chciałbym po krótce opisać chociaż najważniejsze z nich.

Po pierwsze zniknęło słowo map, dobrze znane z poprzedniej wersji frameworka. Uprościło to trochę zapis. Np. w poprzedniej wersji taki zapis:

map.resources :posts do
    map.resource :comments
end

można teraz zapisać jako:

resources :posts do
    resources :comments
end

Routing podstawowy i nazwany

map.connect został zastąpiony w rails 3 metodą match. Dodatkowo w routingach nie podaje się już oddzielnie nazwy kontrolera i akcji. Zamiast tego oddziela się je znakiemm #. Dla przykładu routing z poprzedniej wersji frameworka wyglądający w ten sposób:

map.connect 'posts/:id', :controller => "posts", :action => "view"

przyjmie taką postać:

match 'posts/:id', :to => 'posts#view'

Jak widać zapis jest o wiele czytelniejszy. Pojawił się także nowy paramert :to, który został wprowadzony po połączeniu :action i :controller.

Metoda match została także użyta przy nazwanych routingach.
Routingi nazwane są to takie, które tworzą automagicznie helpery do wyświetlania odpowiednich adresów URL. Dla przykładu zapis:

map.logout '/logout', :controller => 'sessions', :action => 'destroy'

będzie wyglądał teraz tak:

match 'logout', :to => 'sessions#destroy', :as => 'logout'

Parametr :as oznacza nazwę, która zostanie użyta podczas tworzenia helperów. W powyższym przypadku: logout_path i logout_url.

Inny przykład użycia :as:

match 'users/show/:id', :as => 'profile'
# zapis w kontrolerze:
profile_path(current_user.id)

Drugim parametrem, którego można użyć wraz z match jest :via. Parametrem tym, określamy, które metody żądania HTTP są dostępne dla danego routingu.

match 'account/setup', :via => [:post, :get]

.
W przypadku, gdy ograniczamy wejście tylko do jednej metody, możemy użyć jej nazwy zamiast match

match 'account/setup', :via => :get
#jest jednoznaczne z:
get 'account/setup'

Rails 3 wprowadził także kilka skrótów, które możemy wykorzystać w jednoznacznych sytuacjach. Dla przykładu, możemy pominąć wspomniany wyżej parametr :to zamieniając oba parametry w mapę.

match 'logout', :to => 'sessions#destroy'
match 'logout' => 'sessions#destroy'

Oba powyższe przypadki są jednoznaczne.
Jeszcze większy skrót jest gdy mapowany url jest analogiczny do nazwy kontrolera i akcji, wtedy wogóle nie musimy określać punktu docelowego.

match 'sessions/destroy', :to => 'sessions#destroy'
match 'sessions/destroy' => 'sessions#destroy'
match 'sessions/destroy'

Wszystkie powyższe zapisy są analogiczne. Kierują wejście na ’sessions/destroy’ do kontrolera SessionsController i akcji destroy.

Route domyślny i segmenty opcjonalne

Ciekawostką wprowadzoną w Rails 3 są opcjonalne segmenty w routingu. Są to takie fragmenty adresu URL, które mogą wystąpić lecz nie muszą. Opcjonalne fragmenty są w zapisie umieszczone w nawiasach.
Najlepszym przykładem ich użycia jest route domyślny, który zmienił postać z:

map.connect ':controller/:action/:id'
map.connect ':controller/:action/:id.:format'

na:

match ':controller(/:action(/:id(.:format)))'

Jak widać powyżej parametry :action, :id i :format są opcjonalne.

Dodatkową przydatną informacją na temat domyślnego routingu jest fakt, że został on domyślnie wyłączony w Rails 3. Jeżeli chcemy użyć tego domyślnego mapowania musimy je odkomentować jednak nie jest to zalecane.

Routing główny

Routing główny jest często określany także pustym. Jest to mapowanie, które jest wyświetlane po wpisaniu w przeglądarce samej nazwy domeny, bez żadnych parametrów.
W rails 2 takie mapowanie jest określane za pomocą metody map.root. W obecnej wersji, pominięto map, więc wystarczy użycie metody root.
Stary zapis:

map.root :controller => "posts", :action => "index"

można w nowej wersji przedstawić w ten sposób:

root :to => 'posts#index'

Ponownie widać uproszczenie zapisu.

Zagnieżdżone zasoby

Niektóre modele w tworzonej aplikacji posiadają referencje do innych, referencje te są zdefiniowane poprzez użycie has_many lub has_one w definicji modelu. Na przykład:

class Post < ActiveRecord::Base
  has_many :comments
end
 
class Comment < ActiveRecord::Base
  belongs_to :post
end

Zagnieżdżony routing pozwala na dostęp do “niższych” zasbów bezpośrednio z URL’a, na przykład: /posts/2/comments/3 dostarczy komentarz o ID=3, który należy do postu o id = 2.
Aby taki routing był możliwy musimy go zdefiniować. Robimy t w ten sposób:

resources :posts do
  resources :comments
end

Po takiej deklaracji zostaną także utworzone odpowiednie helpery, np.:post_comments_path, edit_post_comment_path.

W przypadku jednak gdy helpery te są za długie, lub nie chcemy korzystać z modelu nadrzędnego możemy użyć opcji shallow, która pozwoli nam na bezpośredni dostęp do zagnieżdżonych zasobów.

resources :posts do
  shallow do
    resources :comments
  end
end

Od tej pory możemy używać /comments/2 zamiast /posts/2/comments/2.
Dla przypomnienia w rails 2 z tej opcji korzystało się w ten sposób:

map.resources :posts, :shallow => true do |post|
  post.resources :comments
end

Zasoby

Od czasów wprowadzenia definicji resources do routes, zaleca się z korzystania z tej metody. Tworzy ona helpery oraz zarządza odpowiednimi RESTowymi połączeniami z zasobami.
Aplikacja mapuje odpowiednio wszystkie CRUD’owe metody dla takiego zasobu(index, new, create, delete, update, show, edit).
W rails 3 możemy zrezygnować z niektórych (except), lub wskazać tylko te z których chcemy skorzystać (only):

resources :comments, :except => [:index]
resources :sessions, :only => [:new, :create, :destroy]

Więcej niż REST

Czasem wprowadzamy do naszych kontrolerów inne akcje, do których chcielibyśmy mieć dostęp z zewnątrz. Dodatkowe akcje definiujemy za pomocą metod collections i member zależnie czy chcemy manipulować zbiorem obiektów czy jedną sztuką.
W rails 2 pisaliśmy coś takiego:

map.resources :orders, 
  :collection => {
    :only_new => :get,
    :accepted => :get 
  },
  :member => {
    :change_status => :put
  }

teraz możemy pisać tak:

resources :posts do
  collection do
    get :only_new, :accepted
  end
  member do
    put :change_status
  end
end

lub tak:

resources :posts do
  get :only_new, :on => :collection
  get :accepted, :on => :collection
  put :change_status, :on => :member
end

Zmiana nazwy parametru żądania

W niektórych przypadkach, zwłaszcza w aplikacjach nieanglojęzycznych przydatna jest opcja zmiany nazwy akcji. Np. Chcielibyśmy ze względu na SEO aby w URL było używane “aktualizuj” zamiast “edit”. Możemy tego dokonać za pośrednictwem opcji path_names

resources :users, :path_names => {:edit => 'aktualizuj'}

Przekierowanie żądania

W rails 3 jest możliwe przekierowanie wejścia z jednego żądania na inne

match '/profile', :to => redirect('/users/show')
#albo
match '/profile/:username' => redirect('/users/show/%{username})

Ograniczenia

W routes.rb jest możliwość wprowadzenia ograniczeń co do żądania, np. ID może składać się tylko z pięciu cyfr lub podobne.

resources :users, :constraints => { :id => /\d{5}/ }
#lub w przypadku gdy takie ograniczenia są wspólne dla kilku zasobów:
constraints(:id => /\d{5}/) do
  resources :users
  resources :posts
end

To nie wszystkie nowości, które zostały wprowadzone w Rails 3, pozostały do opisania np. uruchamianie aplikacji bezpośrednio na racku lub inne perełki. Mam nadzieję jednak, że da to ogólny wgląd w nadchodzące zmiany.

  • Wykop
  • Blip
  • Twitter
  • Facebook
  • DZone
  • Digg
  • Blinklist
  • Delicious
  • Evernote
  • LinkedIn
  • Google Bookmarks
  • Google Buzz
  • Google Reader
  • Share/Bookmark

Jul 16 2010

Pickle na Rails3

Apliacja, którą piszę w RubyOnRails idzie tak wolno i wymaga tyle refaktoringu, że postanowiłem ją przepisać w Rails3. Na szczeście projekt jest w początkowej fazie a większość pracy dotyczyła samego wyglądu aplikacji więc przenosić się można.

Podczas przygotowywania środowiska jednak napotkałem na jeden problem. Gem, którego chętnie używam do testowania – Pickle – nie za bardzo chciał współpracować z rails 3. Problemem były generatory, których składnia w nowych railsach trochę się zmieniła. Znalazłem jednak rozwiązanie, polecane nawet przez samego autora. Otóż należy użyć forka projektu zrobionego prze codegrama, który rozwiązał ten problem. Jak to zrobić?

1. W pliku Gemfile, wskazać repozytorium git, z którego korzystamy podczas instalacji.

gem 'pickle', :git => "git://github.com/codegram/pickle.git"

2. Zainstalowanie gemów z bundlera.

bundle install

3. Uruchomienie generatów Pickle:

rails g pickle:skeleton --path --email

Atrybuty

--path i --email

są opcjonalne, ale polecam ich użycia.

  • Wykop
  • Blip
  • Twitter
  • Facebook
  • DZone
  • Digg
  • Blinklist
  • Delicious
  • Evernote
  • LinkedIn
  • Google Bookmarks
  • Google Buzz
  • Google Reader
  • Share/Bookmark

Mar 5 2010

Rails Template

Idąc za ciosem postanowiłem wydłubać własny szablonik do startu z aplikacjami. Jest on dostępny na githubie i można śmiało z niego korzystać.
Co robi szablonik?

- inicjuje repozytorium Git, dodaje niektóre miejsca i pliki do ignore’a po czym zatwierdza resztę.

- instaluje platformę testową RSpec, RSpec-Rails, Cucumber, Factory_Girl i Webrat.

- instaluje authologic i declarative_authorization,

- tworzy model do dodawania artykułów oraz cruda do niego.

- tworzy model użytkownika, ról  i sesji

- tworzy widoki dla artykułów, panel logowania i edycja profilu.

- tworzy dwie początkowe role: user i admin.

- nadaje uprawnienia:

- gość może czytać artykuły, założyć konto i się zalogować,

- użytkownik może się wylogować, dodać artykuł, edytować lub usunąć własny artykuł, edytować swój profil,

- admin może wszystko.

Planuję jeszcze nad kilkoma dodatkami, ale nie wiem jeszcze dokładnie co i jak. Muszę to przemyśleć. Jak na razie szablon tworzy to, co w prawie każdej aplikacji istnieje. Modele można rozbudować wg własnych potrzeb ale mamy już dobry punkt początkowy.

Zapraszam do testowania i wyrażania swoich uwag.

  • Wykop
  • Blip
  • Twitter
  • Facebook
  • DZone
  • Digg
  • Blinklist
  • Delicious
  • Evernote
  • LinkedIn
  • Google Bookmarks
  • Google Buzz
  • Google Reader
  • Share/Bookmark

Dec 12 2009

Automatyczny start czyli Rails Templates

Jeżeli tworzymy kilka aplikacji w ruby on rails, to przeważnie początkowe etapy są do siebie bardzo podobne. Np. inicjalizacja kontroli wersji (np. w sposób jaki jest opisany w poprzednim artykule), instalacja ulubionych pluginów, usuwanie zbędnych plików, Czy też inne operacje. Na szczeście do pomocy przychodzą nam Templates, które zostały wprowadzone w rails 2.3. Teplate to nic innego niż plik ruby, w którym wpisujemy komendy w przygotowanym do tego języku domenowym (DSL). Po przygotowaniu takiego szablonu inicjujemy projekt rails z parametrem -m ścieżka_do_szablonu.rb. Rails od razu po wykonaniu inicjacji projektu od razu uruchomi podany plik.

rails my_app -m ~/szablon_startowy.rb

tak samo jak URI, możemy uzywać URL:

rails my_app -m http://marioosh.5dots.pl/szablon.txt

(powyższy plik nie istnieje więc nie testujcie ;) )
ostatnim sposobem jest inicjacja szablonu przed odpowiednie zadanie rake z ustawienie zmiennej LOCATION:

rake rails:template LOCATION=~/szablon_startowy.rb

› Continue reading

  • Wykop
  • Blip
  • Twitter
  • Facebook
  • DZone
  • Digg
  • Blinklist
  • Delicious
  • Evernote
  • LinkedIn
  • Google Bookmarks
  • Google Buzz
  • Google Reader
  • Share/Bookmark

Dec 11 2009

Objęcie kontrolą wersji Git nowej aplikacji Rails

Za każdym razem, gdy rozpoczynam pracę z projektem, muszę skonfigurować Git, aby repozytorium nie zawierało zbędnych plików.
Cała operacja jest wykonywana w kilku krokach, gdzie pierwszym z nich będzie stworzenie nowej aplikacji rails na naszym komputerze. Następnie musimy zaiinicjować kontrolę wersji.


$ rails my_app
$ cd my_app
$ git init
$ git status
...
# Untracked files:
# (use "git add ..." to include in what will be committed)
#
# README
# Rakefile
# app/
# config/
# db/
# doc/
# log/
# public/
# script/
# test/
› Continue reading

  • Wykop
  • Blip
  • Twitter
  • Facebook
  • DZone
  • Digg
  • Blinklist
  • Delicious
  • Evernote
  • LinkedIn
  • Google Bookmarks
  • Google Buzz
  • Google Reader
  • Share/Bookmark