Ten tutorial zakłada, że posiadasz podstawową wiedzę o Railsach z lektury przewodnika Getting Started with Rails.
Ten przewodnik jest oparty na Rails 3.0. Niektóre z pokazanych tu kodów nie będą działać we wcześniejszych wersjach Rails.
- 1 Podstawy wiersza poleceń
- 1.1 rails new
- 1.2 rails server
- 1.3 rails generate
- 1.4 konsola rails
- 1.5 rails dbconsole
- 1.6 rails plugin
- 1.7 rails runner
- 1.8 rails destroy
- 2 Rake
- 2.1 about
- 2.2 assets
- 2.3 db
- 2.4 doc
- 2.5 notes
- 2.6 routes
- 2.7 test
- 2.8 tmp
- 2.9 Różne
- 3 Zaawansowany wiersz poleceń Rails
- 3.1 Railsy z bazami danych i SCM
- 3.2 serwer z różnymi backendami
- Wskazówki
1 Podstawy wiersza poleceń
Jest kilka poleceń, które są absolutnie krytyczne dla twojego codziennego używania Rails. W kolejności tego, jak często będziesz ich prawdopodobnie używał, są to:
- rails console
- rails server
- rake
- rails generate
- rails dbconsole
- rails new app_name
Utwórzmy prostą aplikację Rails, aby przejść przez każde z tych poleceń w kontekście.
1.1 rails new
Pierwszą rzeczą, którą będziemy chcieli zrobić jest stworzenie nowej aplikacji Rails poprzez uruchomienie polecenia rails new po zainstalowaniu Rails.
Możesz zainstalować klejnot rails wpisując gem install rails, jeśli jeszcze go nie masz. Postępuj zgodnie z instrukcjami w Rails 3 Release Notes
$ rails new commandsapp create create README.rdoc create .gitignore create Rakefile create config.ru create Gemfile create app ... create tmp/cache create tmp/pids create vendor/plugins create vendor/plugins/.gitkeep
Rails ustawi cię z tym, co wydaje się być ogromną ilością rzeczy dla tak małego polecenia! Masz teraz całą strukturę katalogów Rails wraz z całym kodem potrzebnym do uruchomienia naszej prostej aplikacji zaraz po wyjęciu z pudełka.
1.2 rails server
Komenda rails server uruchamia mały serwer WWW o nazwie WEBrick, który jest dołączony do Rubiego. Będziesz go używał za każdym razem gdy będziesz chciał uzyskać dostęp do swojej aplikacji poprzez przeglądarkę internetową.
WEBrick nie jest jedyną opcją do obsługi Railsów. Zajmiemy się tym później.
Bez dalszej pracy, serwer railsowy uruchomi naszą nową, błyszczącą aplikację Railsową:
Z pomocą zaledwie trzech poleceń stworzyliśmy serwer Railsowy nasłuchujący na porcie 3000. Przejdź do przeglądarki i otwórz http://localhost:3000, zobaczysz działającą podstawową aplikację Rails.
Możesz również użyć aliasu „s” do uruchomienia serwera: rails s.
Serwer może być uruchomiony na innym porcie przy użyciu opcji -p. Domyślne środowisko deweloperskie można zmienić używając opcji -e.
$ rails server -e production -p 4000
Opcja -b wiąże Railsy z podanym ip, domyślnie jest to 0.0.0.0. Możesz uruchomić serwer jako daemon przekazując opcję -d.
1.3 rails generate
Komenda rails generate używa szablonów do tworzenia całej masy rzeczy. Samo uruchomienie rails generate daje listę dostępnych generatorów:
Możesz również użyć aliasu „g” do wywołania polecenia generatora: rails g.
Możesz zainstalować więcej generatorów poprzez generator gems, porcje wtyczek, które bez wątpienia zainstalujesz, a nawet możesz stworzyć własne!
Używanie generatorów pozwoli Ci zaoszczędzić dużą ilość czasu poprzez pisanie kodu typu boilerplate, kodu, który jest niezbędny do działania aplikacji.
Zróbmy nasz własny kontroler za pomocą generatora kontrolerów. Ale jakiej komendy powinniśmy użyć? Zapytajmy generatora:
Wszystkie narzędzia konsoli Rails mają tekst pomocy. Jak w przypadku większości narzędzi *nixowych, możesz spróbować dodać –help lub -h na końcu, na przykład rails server –help.
Generator kontrolerów oczekuje parametrów w postaci generate controller ControllerName action1 action2. Stwórzmy kontroler Greetings z akcją hello, który powie nam coś miłego.
$ rails generate controller Greetings hello create app/controllers/greetings_controller.rb route get "greetings/hello" invoke erb create app/views/greetings create app/views/greetings/hello.html.erb invoke test_unit create test/functional/greetings_controller_test.rb invoke helper create app/helpers/greetings_helper.rb invoke test_unit create test/unit/helpers/greetings_helper_test.rb invoke assets create app/assets/javascripts/greetings.js invoke css create app/assets/stylesheets/greetings.css
Co to wszystko wygenerowało? Upewniło się, że w naszej aplikacji jest kilka katalogów i utworzyło plik kontrolera, plik widoku, plik testu funkcjonalnego, helper dla widoku, plik javascript i plik arkusza stylów.
Sprawdź kontroler i zmodyfikuj go trochę (w app/controllers/greetings_controller.rb):
class GreetingsController < ApplicationController def hello @message = "Hello, how are you today?" endend
Następnie widok, aby wyświetlić naszą wiadomość (w app/views/greetings/hello.html.erb):
<h1>A Greeting for You!</h1><p><%= @message %></p>
Uruchom swój serwer za pomocą serwera rails.
$ rails server=> Booting WEBrick...
Upewnij się, że nie masz żadnych plików „tilde backup” w app/views/(controller), w przeciwnym razie WEBrick nie pokaże oczekiwanych danych wyjściowych. Wydaje się, że jest to błąd w Rails 2.3.0.
Adres URL będzie http://localhost:3000/greetings/hello.
Rails przychodzi z generatorem również dla modeli danych.
Listę dostępnych typów pól można znaleźć w dokumentacji API dla metody column dla klasy TableDefinition.
Ale zamiast generować model bezpośrednio (co zrobimy później), ustawmy rusztowanie. Rusztowanie w Railsach to pełny zestaw modelu, migracja do bazy danych dla tego modelu, kontroler do manipulowania nim, widoki do przeglądania i manipulowania danymi oraz zestaw testów dla każdego z powyższych.
Ustawimy prosty zasób o nazwie „HighScore”, który będzie śledził nasze najwyższe wyniki w grach wideo, w które gramy.
Generator sprawdza, czy istnieją katalogi dla modeli, kontrolerów, helperów, layoutów, testów funkcjonalnych i jednostkowych, arkuszy stylów, tworzy widoki, kontroler, model i migrację bazy danych dla HighScore (tworząc tabelę high_scores i pola), dba o trasę dla zasobu i nowe testy dla wszystkiego.
Migracja wymaga od nas migracji, czyli uruchomienia pewnego kodu Ruby (mieszkającego w tym 20100209025147_create_high_scores.rb), aby zmodyfikować schemat naszej bazy danych. Jakiej bazy danych? Baza danych sqlite3, którą Railsy stworzą dla Ciebie, gdy uruchomimy komendę rake db:migrate. Za chwilę porozmawiamy więcej o Rake dogłębnie.
Porozmawiajmy o testach jednostkowych. Testy jednostkowe to kod, który testuje i tworzy twierdzenia o kodzie. W testach jednostkowych, bierzemy małą część kodu, powiedzmy metodę modelu, i testujemy jej wejścia i wyjścia. Testy jednostkowe są twoim przyjacielem. Im szybciej pogodzisz się z faktem, że jakość twojego życia drastycznie wzrośnie, gdy będziesz testował swój kod jednostkowo, tym lepiej. Poważnie. Zrobimy jeden za chwilę.
Zobaczmy interfejs, który Railsy dla nas stworzyły.
$ rails server
Przejdź do przeglądarki i otwórz http://localhost:3000/high_scores, teraz możemy tworzyć nowe wysokie wyniki (55,160 w Space Invaders!)
1.4 konsola rails
Komenda konsoli pozwala ci na interakcję z twoją aplikacją Rails z linii poleceń. Od spodu, konsola rails używa IRB, więc jeśli kiedykolwiek jej używałeś, będziesz jak w domu. Jest to przydatne do testowania szybkich pomysłów z kodem i zmiany danych po stronie serwera bez dotykania strony.
Możesz również użyć aliasu „c” do wywołania konsoli: rails c.
Jeśli chcesz przetestować jakiś kod bez zmiany danych, możesz to zrobić wywołując rails console –sandbox.
$ rails console --sandboxLoading development environment in sandbox (Rails 3.1.0)Any modifications you make will be rolled back on exitirb(main):001:0>
1.5 rails dbconsole
rails dbconsole określa, jakiej bazy danych używasz i przenosi Cię do dowolnego interfejsu wiersza poleceń, którego byś użył (i określa również parametry wiersza poleceń, które należy mu podać!). Obsługuje MySQL, PostgreSQL, SQLite i SQLite3.
Możesz także użyć aliasu „db” do wywołania dbconsole: rails db.
1.6 rails plugin
Komenda rails plugin upraszcza zarządzanie wtyczkami. Wtyczki mogą być instalowane przez nazwę lub adres URL repozytorium. Musisz mieć zainstalowanego Gita, jeśli chcesz zainstalować wtyczkę z repozytorium Git. To samo dotyczy również Subversion.
$ rails plugin install https://github.com/technoweenie/acts_as_paranoid.git+ ./CHANGELOG+ ./MIT-LICENSE......
1.7 rails runner
runner uruchamia kod Ruby w kontekście Rails nieinteraktywnie. Na przykład:
$ rails runner "Model.long_running_method"
Możesz również użyć aliasu „r” do wywołania runnera: rails r.
Możesz określić środowisko, w którym polecenie runnera powinno działać, używając przełącznika -e.
$ rails runner -e staging "Model.long_running_method"
1.8 rails destroy
Myśl o destroy jako o przeciwieństwie do generate. Zorientuje się co zrobiło generate i cofnie to.
Możesz także użyć aliasu „d” do wywołania polecenia destroy: rails d.
2 Rake
Rake to Ruby Make, samodzielne narzędzie Rubiego, które zastępuje uniksowe narzędzie 'make’, i używa 'Rakefile’ oraz plików .rake do budowania listy zadań. W Railsach, Rake jest używany do typowych zadań administracyjnych, szczególnie tych skomplikowanych, które opierają się na sobie nawzajem.
Możesz uzyskać listę dostępnych zadań Rake, która często będzie zależała od twojego bieżącego katalogu, wpisując rake –tasks. Każde zadanie ma opis i powinno pomóc Ci znaleźć to, czego potrzebujesz.
$ rake --tasks(in /home/foobar/commandsapp)rake db:abort_if_pending_migrations # Raises an error if there are pending migrationsrake db:charset # Retrieves the charset for the current environment's databaserake db:collation # Retrieves the collation for the current environment's databaserake db:create # Create the database defined in config/database.yml for the current Rails.env......rake tmp:pids:clear # Clears all files in tmp/pidsrake tmp:sessions:clear # Clears all files in tmp/sessionsrake tmp:sockets:clear # Clears all files in tmp/sockets
2.1 about
rake about podaje informacje o numerach wersji dla Ruby, RubyGems, Rails, podkomponentów Rails, folderu Twojej aplikacji, bieżącej nazwy środowiska Rails, adaptera bazy danych Twojej aplikacji, oraz wersji schematu. Jest to przydatne, gdy musisz poprosić o pomoc, sprawdzić czy łatka bezpieczeństwa może mieć na Ciebie wpływ, lub gdy potrzebujesz kilku statystyk dla istniejącej instalacji Rails.
2.2 assets
Możesz wstępnie skompilować aktywa w app/assets używając rake assets:precompile i usunąć te skompilowane aktywa używając rake assets:clean.
2.3 db
Najczęstszymi zadaniami przestrzeni nazw db: Rake namespace są migrate i create, i opłaci się wypróbować wszystkie zadania rake migracji (up, down, redo, reset). rake db:version jest przydatny przy rozwiązywaniu problemów, mówi o aktualnej wersji bazy danych.
Więcej informacji o migracjach można znaleźć w przewodniku Migrations.
2.4 doc
Przestrzeń nazw doc: posiada narzędzia do generowania dokumentacji dla twojej aplikacji, dokumentacji API, przewodników. Dokumentacja może być również usunięta, co jest głównie przydatne do odchudzenia Twojej bazy kodowej, np. jeśli piszesz aplikację Rails dla platformy wbudowanej.
- rake doc:app generuje dokumentację dla Twojej aplikacji w doc/app.
- rake doc:guides generuje przewodniki po Rails w doc/guides.
- rake doc:rails generuje dokumentację API dla Rails w doc/api.
- rake doc:plugins generuje dokumentację API dla wszystkich wtyczek zainstalowanych w aplikacji w doc/plugins.
- rake doc:clobber_plugins usuwa wygenerowaną dokumentację dla wszystkich wtyczek.
2.5 notes
rake notes przeszuka Twój kod w poszukiwaniu komentarzy zaczynających się od FIXME, OPTIMIZE lub TODO. Wyszukiwanie odbywa się w plikach z rozszerzeniem .builder, .rb, .erb, .haml i .slim zarówno dla domyślnych, jak i niestandardowych adnotacji.
Jeśli szukasz konkretnej adnotacji, powiedzmy FIXME, możesz użyć rake notes:fixme. Zauważ, że musisz pisać nazwę adnotacji małymi literami.
Możesz także używać niestandardowych adnotacji w swoim kodzie i wymieniać je za pomocą rake notes:custom, określając adnotację za pomocą zmiennej środowiskowej ANNOTATION.
$ rake notes:custom ANNOTATION=BUG(in /home/foobar/commandsapp)app/model/post.rb: * Have to fix this one before pushing!
Podczas używania specyficznych adnotacji i niestandardowych adnotacji, nazwa adnotacji (FIXME, BUG itp.) nie jest wyświetlana w liniach wyjściowych.
2.6 routes
rake routes wyświetli listę wszystkich zdefiniowanych przez ciebie tras, co jest przydatne do śledzenia problemów z trasowaniem w twojej aplikacji lub daje ci dobry przegląd adresów URL w aplikacji, z którą próbujesz się zapoznać.
2.7 test
Dobry opis testowania jednostkowego w Railsach znajduje się w A Guide to Testing Rails Applications
Railsy dostarczane są z zestawem testów o nazwie Test::Unit. Railsy zawdzięczają swoją stabilność właśnie wykorzystaniu testów. Zadania dostępne w przestrzeni nazw test: pomagają w uruchamianiu różnych testów, które, miejmy nadzieję, napiszesz.
2.8 tmp
Katalog Rails.root/tmp jest, podobnie jak *nixowy katalog /tmp, miejscem przechowywania plików tymczasowych, takich jak sesje (jeśli używasz magazynu plików), plików id procesów i zbuforowanych akcji.
Zadania tmp: namespaced pomogą Ci wyczyścić katalog Rails.root/tmp:
2.9 Różne
- rake stats jest świetny do przeglądania statystyk twojego kodu, wyświetlając takie rzeczy jak KLOCs (tysiące linii kodu) i twój stosunek kodu do testu.
- rake secret da ci pseudolosowy klucz do użycia dla twojego sekretu sesji.
- rake time:zones:all wymienia wszystkie strefy czasowe, o których wie Rails.
3 Zaawansowany wiersz poleceń Rails
Bardziej zaawansowane użycie wiersza poleceń koncentruje się wokół znalezienia użytecznych (nawet zaskakujących czasami) opcji w narzędziach, i dopasowania ich do twoich potrzeb i specyficznego przepływu pracy. Oto kilka sztuczek w rękawie Railsów.
3.1 Railsy z bazami danych i SCM
Podczas tworzenia nowej aplikacji Rails masz możliwość określenia, jakiego rodzaju bazy danych i jakiego rodzaju systemu zarządzania kodem źródłowym będzie używała twoja aplikacja. Pozwoli ci to zaoszczędzić kilka minut, a na pewno wiele naciśnięć klawiszy.
Zobaczmy, co zrobi dla nas opcja –git i opcja –database=postgresql:
Musieliśmy utworzyć katalog gitapp i zainicjować puste repozytorium git, zanim Rails doda do naszego repozytorium pliki, które utworzył. Zobaczmy co umieścił w naszej konfiguracji bazy danych:
Wygenerował również kilka linii w naszej konfiguracji database.yml odpowiadających naszemu wyborowi PostgreSQL jako bazy danych.
Jedynym haczykiem w używaniu opcji SCM jest to, że musisz najpierw stworzyć katalog swojej aplikacji, następnie zainicjować SCM, potem możesz uruchomić polecenie rails new aby wygenerować podstawę swojej aplikacji.
3.2 serwer z różnymi backendami
Wiele osób stworzyło dużą liczbę różnych serwerów internetowych w Rubim, i wiele z nich może być używanych do uruchamiania Railsów. Od wersji 2.3, Railsy używają Rack do serwowania stron internetowych, co oznacza, że każdy serwer WWW, który implementuje obsługę Rack może być użyty. Obejmuje to WEBrick, Mongrel, Thin i Phusion Passenger (by wymienić tylko kilka!).
Po więcej szczegółów na temat integracji z Rack, zobacz Rails on Rack.
Aby użyć innego serwera, po prostu zainstaluj jego gem, a następnie użyj jego nazwy jako pierwszego parametru do rails server:
Wskazówki
Zachęcamy do pomocy w poprawie jakości tego przewodnika.
Jeśli widzisz jakieś literówki lub błędy rzeczowe, które jesteś pewien, że możesz poprawić, sklonuj repozytorium rails i otwórz nowe żądanie ściągnięcia. Możesz także poprosić o prawa do commitów na docrails, jeśli planujesz zgłosić kilka poprawek. Commity są sprawdzane, ale dzieje się to po wysłaniu przez Ciebie zgłoszenia. To repozytorium jest okresowo scalane z repozytorium głównym.
Możesz również znaleźć niekompletną zawartość, lub rzeczy, które nie są aktualne. Prosimy o dodanie brakującej dokumentacji dla master. Sprawdź Wytyczne Ruby on Rails Guides dla stylu i konwencji.
Jeśli z jakiegoś powodu zauważysz coś do poprawienia, ale nie możesz tego naprawić samemu, proszę otwórz problem.
I na koniec, ale nie mniej ważne, wszelkiego rodzaju dyskusje dotyczące dokumentacji Ruby on Rails są bardzo mile widziane na liście mailingowej rubyonrails-docs.