Menu

  • Home
  • Flask Tutorial
  • WebGL
  • Kontakt

Alicja | Theme by Theme in Progress | Proudly powered by WordPress

Alicja & IT
  • Home
  • Flask Tutorial
  • WebGL
  • Kontakt

Aplikacja webowa w Pythonie – Flask – Migracja z localhosta na serwer, czyli co może pójść nie tak z bazą danych – #10

January 30, 2017Flask Standard

Powoli nadchodzi taki etap, że Twoja aplikacja jest już niemal gotowa – ale niestety na localhoście, a nie na właściwym serwerze. W tym przypadku chodzi o serwer Unixowy, a dokładniej Ubuntu. Niestety Windows i Linux znacznie się od siebie różnią i czasem coś, co działa na jednym, niekoniecznie pójdzie na drugim. W moim przypadku utrudnienie jest jeszcze jedno – nie posiadam uprawnień root-a, w związku z czym prosta instalacja pakietów przez pip niestety nie wchodzi w grę. Na szczęście Flask jest już na nim postawiony, więc chociaż to nie powinno mnie zawieść :)

Baza danych na serwerze

Jako że o instalowaniu czegokolwiek w miły sposób mogę jedynie pomarzyć, pozostaje mi pobranie odpowiednich paczek i dodanie do swojego folderu na serwerze manualnie. Zaczęłam od bazy danych, jako że większość aplikacji z niej korzysta.

I pojawiła się pierwsza wątpliwość – z czego ja w ogóle korzystam? Flask-MySQL czy Flask-MySQLdb? Twórcy, którzy nazywali te paczki i zrobili strony z ich dokumentacją w taki sposób (ta bez “db” i ta z “db”) chcieli chyba wybitnie utrudnić życie ludzkości. Sieczka z mózgu robi się jeszcze większa po spojrzeniu w obie biedne dokumentacje:

wtf

Z tego co zdążyłam wyczytać w internecie, nie tylko ja mam problem z tymi dwoma rozszerzeniami.

Wróciłam więc szybko do wpisu, w którym informowałam Was jak podłączyć się do bazy danych i odkryłam, że… popełniłam błąd. W nagłówku napisałam, że połączymy się z Flask-MySQLdb, a w treści opisałam łączenie z Flask-MySQL (i tego już trzymałam się do końca). Pomyłkę już oczywiście poprawiłam i bardzo za nią przepraszam, ale pewnie sami widzicie gdzie leży problem.

Z ciekawości ściągnęłam sobie oba pakiety i popatrzyłam w kod – tak naprawdę różnic między nimi jest niewiele. W jednej korzystamy z connection, a w drugiej z connect i zmienne ze screenshota zawierają (bądź nie) jedno słowo więcej. Więcej różnic, które miałyby znaczenie dla zwykłego użytkownika raczej nie ma – każda z paczek korzysta z innych importów ale w sumie dla nas nie ma to ogromnego znaczenia.

Ale – wróćmy do tematu.

Aby móc przerzucić moją aplikację na serwer, potrzebuję umieścić na nim rozszerzenie bazodanowe. Ściągnijmy więc Flask-MySQLa stąd i folder flaskext z pobranej paczki umieśćmy w nowym folderze zawierającym projekt.

Wysłanie aplikacji na serwer

Po dorzuceniu potrzebnej paczki, przekopiowałam cały folder z moim projektem na serwer. Plik run.py, tak jak wcześniej, zostawiłam “poziom wyżej”, tak jak na screenie:

Nadeszła więc ta wielka chwila, aby uruchomić apkę… i error! Najlepiej:

struktura2

Jak widać, do naszego Flask-MySQL potrzebujemy jeszcze jednej paczki – pymysql. Szybko pobierzmy ją z githuba i właściwy folder umieśćmy na naszym serwerze.

stru

Gotowe :) Teraz ponownie spróbujmy uruchomić aplikację – nie wiem jak u Was, ale moja ruszyła!

Ciekawe, czy coś się wyświetla… Niestety – odpowiedź brzmi nie. Przypominając sobie to, co pisałam w pierwszym odcinku tutorialu, zauważam, że moje app.run(debug=True) w run.py jest trochę łyse. Dodam do niego port oraz host składający się z samych zer (jeżeli uruchamiamy Flaska na zdalnym serwerze i chcemy, aby był on dostępny również z zewnątrz, powinniśmy ustawić ‘0.0.0.0’).

Podmieniam linijkę na: app.run(host="0.0.0.0", port=5019, debug=True)

Wchodzę pod www.adres-serwera:5019 i z pozoru wszystko wydaje się śmigać…

login

…dopóki nie spróbuję się zalogować :)

stru

Błąd spowodowany jest ustawieniami bazy danych – na localhoście w pliku __init__.py wygląda to tak:

1
2
3
4
5
app.config['MYSQL_DATABASE_USER'] = 'root'
app.config['MYSQL_DATABASE_PASSWORD'] = ''
app.config['MYSQL_DATABASE_DB'] = 'flask'
app.config['MYSQL_DATABASE_HOST'] = 'localhost'
app.config['MYSQL_CHARSET'] = 'utf8'

A powinno wyglądać tak:

1
2
3
4
5
app.config['MYSQL_DATABASE_USER'] = 'nazwa_na_serwerze'
app.config['MYSQL_DATABASE_PASSWORD'] = 'haslo_na_serwerze'
app.config['MYSQL_DATABASE_DB'] = 'baza_danych_na_serwerze'
app.config['MYSQL_DATABASE_HOST'] = 'localhost'
app.config['MYSQL_CHARSET'] = 'utf8'

Oczywiście pod nazwa_na_serwerze, haslo_na_serwerze itd. należy podstawić swoje dane :). Wcześniej należy również upewnić się, czy dana baza istnieje i czy tabele, z których korzystamy na pewno są utworzone.

Gotowy kod!

Masz serwer z zainstalowanym Flaskiem? Przygotowałam dla Ciebie dwie paczki z prostym skryptem, który łączy się z bazą danych i wyświetla dane z jednej tabeli. Jedna paczka korzysta z Flask-MySQLdb, a druga z Flask-MySQL, więc wybierz tą, która Ci bardziej odpowiada :)

Aby całość ruszyła, uzupełnij plik __init__.py swoimi danymi dostępowymi do bazy i wrzuć całą paczkę na zewnętrzny serwer. Przez konsolę uruchom apkę: python run.py (lub python3 run.py, jeżeli masz zainstalowane kilka wersji pythona) i sprawdź czy działa wpisując w przeglądarce  nazwa-serwera:5019 :). Dopilnuj również, aby odwołać się do istniejącej tabeli.

  • paczka z Flask-MySQLdb
  • paczka z Flask-MySQL

Powyższe kody znajdziesz również na moim Githubie.

Jeżeli cokolwiek Ci nie zadziała, pisz śmiało – chętnie na to spojrzę :).

Flask:

  • Aplikacja webowa w Pythonie – Flask – Hello World – #1
  • Aplikacja webowa w Pythonie – Flask – Template’y – #2
  • Aplikacja webowa w Pythonie – Flask na Windowsie
  • Aplikacja webowa w Pythonie – Flask – Routing – #3
  • Aplikacja webowa w Pythonie – Flask – Static Files – #4
  • Aplikacja webowa w Pythonie – Flask – Łączenie z bazą danych – #5
  • Aplikacja webowa w Pythonie – Flask – Formularze – #6
  • Aplikacja webowa w Pythonie – Flask – Struktura większej aplikacji, czyli Blueprint – #7
  • Aplikacja webowa w Pythonie – Flask – Logowanie – #8
  • Aplikacja webowa w Pythonie – Flask – Obsługa błędów – #9
  • Aplikacja webowa w Pythonie – Flask – Migracja z localhosta na serwer, czyli co może pójść nie tak z bazą danych – #10
  • Aplikacja webowa w Pythonie – Flask – Deploy na Azure’a – #11

Facebook

Kontakt

kontakt[at]alicja.it

Kategorie

  • Flask (12)
  • Luźne (2)
  • PyGame (5)
  • Relacje z wydarzeń (3)
  • WebGL (3)