How does UX transform businesses? The effects of usability testing
It has already become clear that User Experience (UX) is a key factor in shaping how companies build a business. The customer-centric approach has almost completely replaced […]
Kurs Ruby on Rails – Lekcja 10 – Heroku Deploy
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.
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
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
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.
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...
It has already become clear that User Experience (UX) is a key factor in shaping how companies build a business. The customer-centric approach has almost completely replaced […]
What if there was one simple method to find opportunities for improved design, uncover UX problems, and learn about your target users’ behavior and preferences? Would you […]