Kurs Ruby on Rails

Kurs Ruby on Rails – Lekcja 10 – Heroku Deploy

Czego się nauczycie?

  • Jak skonfigurować potrzebne do deployu narzędzia
  • Jak przeprowadzić deployment na heroku

Niezbędnik kursu:

1. Niezbędne narzędzia i zmiany

Aby nasza aplikacja była dostępna publicznie musimy przeprowadzić jej deployment. Na potrzeby kursu bardzo dobrze sprawdzi nam się platforma Heroku która mimo swoich ograniczeń, w najprostszej konfiguracji jest całkowicie darmowa. Jednak żeby nasza aplikacja była hostowana na heroku, musimy wprowadzić kilka niezbędnych zmian.

PG

Potrzebna będzie nam zmiana bazy danych na bardziej adekwatną do użycia produkcyjnego. Heroku na które będziemy przeprowadzać deploy naszej aplikacji wspiera bazę postgresql.

Jeśli używacie maszyny wirtualnej którą dostarczyliśmy do kursu, postgres był na niej zainstalowany. W przeciwnym wypadku, potrzebne jest zainstalowanie aplikacji postgres. Następnie dodajmy gem do naszego gemfile’a.

Mamy tutaj możliwość ustawienia bazy postgres tylko dla środowiska produkcyjnego natomiast polecam używać jednego adaptera na przestrzeni różnych środowisk, aby zmniejszyć ryzyko błędów w aplikacji. Środowisko deweloperskie powinno jak najbardziej odzwierciedlać środowisko produkcyjne. Tak więc jeśli chcemy zmienić bazę na wszystkich środowiskach dodajemy

gem 'pg'

a usuwamy

# Use sqlite3 as the database for Active Record
  gem 'sqlite3', '~> 1.4'

Jeśli na siłę chcielibyśmy używać pg tylko w środowisku produkcyjnym wtedy wstawiliśmy

group :development, :test do
  gem 'sqlite3'
end

group :production do
  gem 'pg'
end

Czyli przenieślibyśmy sqlite do grupy :development oraz :test, a dla :production używali byśmy pg.

Następnie instalujemy przez dobrze już nam znane

 bundle install

Teraz, chcemy zmienić w naszej konfiguracji żeby korzystała z innego niż dotychczas adaptera. Otwieramy plik config/database.yml

  default: &default
    adapter: sqlite3
    pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
    timeout: 5000

  development:
    <<: *default
    database: db/development.sqlite3

  test:
    <<: *default
    database: db/test.sqlite3

  production:
    <<: *default
    database: db/production.sqlite3

Musimy zmienić adapter z sqlite3 na postgresql oraz nadać nowe nazwy bazom. Przykładowo plik może wyglądać tak:

  default: &default
    adapter: postgresql
    pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
    timeout: 5000

  development:
    <<: *default
    database: development_db

  test:
    <<: *default
    database: test_db

  production:
    <<: *default
    database: production_db

Pamiętajmy, że jeśli zdecydowaliśmy się zmienić bazę danych dla development’u, musimy ją stworzyć oraz zmigrować przez

  rake db:create

i

  rake db:migrate

Heroku

Skupimy się teraz na konfiguracji heroku. Zaczynamy od odwiedzenia strony i założenia darmowego konta.

  https://signup.heroku.com/devcenter

Wpisujemy wymagane dane, wybieramy główny język jako Ruby i kontynuujemy rejestrację zgodnie z podanymi instrukcjami. Jeśli już mamy konto to klikamy sign in w prawym górnym rogu i logujemy się swoimi danymi. Po zalogowaniu powinien nas przywitać dashboard na którym już niedługo zobaczymy naszą aplikację.

W następnej kolejności musimy zainstalować aplikację heroku na swojej maszynie. Wklepujemy następujące polecenie:

  $ sudo snap install --classic heroku

Przypominam, że hasło do użytkownika na maszynie wirtualnej to kurs2021.

Teraz, kiedy mamy zainstalowanego klienta heroku, możemy zalogować się wpisując w terminalu

$ heroku login

klient poprosi nas o wciśnięcie dowolnego przycisku poza q aby przejść do okna przeglądarki w celu kontynuacji logowania. Jeśli wolimy pozostać w terminalu i podać email i haslo tutaj, możemy użyć komendy

 $ heroku login -i

2. Deployment

Teraz gdy mamy przygotowane potrzebne narzędzia stworzymy aplikację w kontekście heroku. Przechodzimy do folderu naszego projektu i wpisujemy w terminalu

$ heroku create ror-kurs

Następnie możemy sprawdzić że zdalny serwer został dodany do naszego lokalnego repozytorium poprzez polecenie

$ git remote -v

Które wyświetli nazwy i adresy wszystkich zdalnych repozytoriów. Widzimy, że pojawia nam się tam heroku. Jeśli odświeżymy dashboard heroku zobaczymy, że pojawiła się nasza aplikacja.

Po kliknięciu w nią otworzą się jej szczegóły, ostatnie aktywności, dostęp do metryk.

Mamy również możliwość otwarcia aplikacji w nowym oknie przez przycisk Open app. Natomiast na ten moment jest to pusty szkielet bo nie wrzuciliśmy jeszcze swojego kodu. Więc aplikacji przywita nas takim ekranem.

Przyszedł czas na faktyczny deploy, wklepujemy do terminala polecenie:

$ git push heroku master

albo

$ git push heroku nazwa_branchy:master

jeśli chcemy zrobić deploy z branchy innej niż master. W konsoli zaobserwujemy masę informacji związanych z ustawianiem środowiska, instalowaniem używanych przez nas gemów, kompilacją assetów, ostrzeżeń itp. To co nas w tym momencie interesuje to zobaczyć informacje o prawidłowym deployu.

Musimy pamiętać, że jeszcze trzeba zmigrować bazę danych na naszym heroku. Komendy które normalnie odpalamy w konsoli w trakcie developmentu odpalamy na heroku poprzedzając je heroku run W wypadku migracji wklejmy w terminal:

$ heroku run rails db:migrate

Heroku run sprawi, że polecenie będzie wykonane w kontenerze naszej aplikacji zwanym przez heroku dyno. Za każdym razem kiedy chcemy uaktualnić kod na serwerze wykonujemy jeszcze raz push mastera na remote heroku. Za każdym razem kiedy wrzucamy na serwer nową migrację musimy pamiętać o wywołaniu migracji na serwerze.

Aby otworzyć aplikację możemy poza klepaniem odpowiedniego url do przeglądarki użyć:

  $ heroku open

Wejście na produkcyjną konsolę

  $ heroku run rails console

Dwie inne przydatne komendy to

  $ heroku logs

Aby obejrzeć logi serwera. Oraz

  $ heroku logs --tail

Aby oglądać logi serwera w trybie live

Możemy się również dostać do interaktywnej konsoli poprzez

 $ heroku run bash

gdzie jesteśmy w stanie pracować podobnie jak dotąd lokalnie, migracje wykonać poprzez rake db:migrate, czy wejść do konsoli railsowej przez rails console

Gratulację przeprowadziliśmy swój pierwszy deploy a aplikacji wyszła na świat.

Przydatne linki

https://devcenter.heroku.com/articles/sqlite3 
https://devcenter.heroku.com/articles/getting-started-with-rails6 
https://devcenter.heroku.com/articles/free-dyno-hours 
https://devcenter.heroku.com/articles/heroku-cli-commands

Przeczytaj również o...

Dołącz do naszego zespołu!

Zobacz oferty pracy