Python
From Rootnode
Contents |
Wstęp
Język Python na Rootnode jest obsługiwany przez maszynę typu fastweb, na której hostowany jest również język Ruby. Python nie jest obsługiwany przez WSGI, działa na znakomitym module passenger.
Zasoby serwera podmontowane są w katalogu /ruby. Należy zwrócić uwagę, że po utworzeniu vhosta przeznaczonego dla aplikacji opartych o język Python w twoim katalogu domowym pojawi się katalog ruby, a nie python.
|
Ze względu na to, że obecne serwery shellowe jak stallman i korn mają przestarzałe wersje składników języka Python, zaleca się wykonywanie wszystkich operacji na nowym serwerze shellowym, którego tymczasowa nazwa to stallman2.rootnode.net. Logowanie odbywa się za pomocą tych samych danych co do serwerów shellowych. Braki w pakietach proszę zgłaszać za pomocą mailisty users-pl. |
Koniecznie przeczytaj opis konfiguracji serwerów typu fastweb.
Informacji na temat ścieżki do aplikacji oraz wielu aplikacji w ramach jednego vhosta szukaj na podstronie dotyczącej języka [Ruby].
Wersja oprogramowania
Na serwerach fastweb oraz stallman2 zainstalowany jest:
- python w wersji 2.6
Jeśli potrzebujesz dodatkowych bibliotek poproś administratora o doinstalowanie dodatkowych paczek.
Konfiguracja domeny, vhosta i bazy danych
Konfiguracja nie odbiega znacząco od tej opisanej na podstronie Fastweb. Słówkiem kluczowym do poleceń szatana jest ruby (tak ruby, ponieważ Python jest obsługiwany przez tą samą maszynę), który należy dodać na końcu poleceń. Rekord A domeny powinien wskazywać na adres IP serwera wall.rootnode.net, czyli 89.248.171.136.
| przykład |
W skrócie konfiguracja vhosta dla aplikacji Trac, może wyglądać następująco:
satan dns add a bongo.pl trac 89.248.171.136 satan vhost add bongo.pl trac.bongo.pl ruby satan vhost init trac.bongo.pl
W katalogu domowym zostanie utworzony katalog ~/ruby, gdzie znajdziesz katalog utworzonego vhosta. Jeśli chciałbyś dodać bazę danych do swojej aplikacji należy ją utworzyć za pomocą następujących poleceń:
satan mysql adddb my1234_trac ruby satan mysql adduser my1234_trac stdin ruby satan mysql grant my1234_trac my1234_trac ruby
Sprawdzamy czy nasza konfiguracja jest poprawna za pomocą poleceń:
$ satan dns list bongo.pl | grep trac 38456 trac a 89.248.171.136 $ satan vhost list | grep trac bongo.pl trac.bongo.pl ruby $ satan mysql list ruby | grep trac my1234_trac my1234_trac all my1234_trac.* yes
Wszystko wygląda w porządku. Zanim zaczniemy testować naszą stronę z lokalnego komputera warto sprawdzić, czy DNS zdążyły się rozpropagować np. za pomocą polecenia ping, dig, host albo nslookup:
$ ping -c 1 trac.bongo.pl PING redmine.bongo.pl (89.248.171.136) 56(84) bytes of data. 64 bytes from wall.rootnode.net (89.248.171.136): icmp_seq=1 ttl=63 time=1.55 ms --- trac.bongo.pl ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 1.553/1.553/1.553/0.000 ms
Widzimy, że odezwał się serwer wall. To oznacza, że DNS działa poprawnie.
Memcache
Jeśli twoja aplikacja ma możliwość integracji z memcache, wykorzystaj to! Wystarczy utworzyć plik conf/memcache w katalogu vhosta oraz przeładować vhosta za pomocą pliku conf/reload. Twój memcache o wielkości 32M, będzie dostępny pod adresem 127.0.0.1:11211.
Szczegóły znajdziesz na podstronie Fastweb.
Django
Aby utworzyć aplikację Django w katalogu ~/ruby/mój.vhost.pl/htdocs wydajemy polecenie:
$ django-admin startproject bongobongo $ mkdir public
gdzie bongobongo to nazwa naszego projektu. Od razu tworzymy katalog public do naszego projektu.
W celu uruchomienia aplikacji napisanej w Pythonie w katalogu htdocs konieczny będzie plik inicjalizacyjny o nazwie passenger_wsgi.py. W przypadku aplikacji Django zawartość może być podobna do poniższej:
import os, sys #automatically finds application's current path nginx_configuration= os.path.dirname(__file__) project = os.path.dirname(nginx_configuration) workspace = os.path.dirname(project) sys.path.append(workspace) os.environ['DJANGO_SETTINGS_MODULE'] = 'bongobongo.settings' import django.core.handlers.wsgi application = django.core.handlers.wsgi.WSGIHandler()
Należy pamiętać o wpisaniu poprawnej nazwy naszej aplikacji. Następnie wystarczy przeładować konfigurację tworząc pusty plik conf/reload w katalogu vhosta.
Po minucie po wejściu na stronę www powinnieneś zobaczyć wiadomość powitalną It worked! Congratulations on your first Django-powered page.
Wirtualne środowiska Pythona
Na Rootnode nie ma dostępnych wszystkich bibliotek Pythona, ale w razie potrzeby doinstalowania jakiejś biblioteki można skorzystać z wirtualnego Pythona za pomocą opisanych poniżej narzędzi. Najpierw jednak poproś administratora o doinstalowanie dodatkowych paczek jeśli istnieją wrepozytorium Debian Testing.
Istnieje możliwość utworzenia drzewa modułów dla Pythona. Lokalne moduły i dodatki do Pythona są dostępne w naszej własnej strukturze katalogów, natomiast lokalne składniki są podlinkowane do właściwych plików znajdujących się w systemowym drzewie.
virtualenv
Virtualenv to stworzone przez Iana Bickinga narzędzie służące do tworzenia odizolowanych środowisk Pythona. Virtualenv jest następcą workingenv oraz rozszerzeniem dla virtual-pythona.
Tworzenie wirtualnego środowiska sprowadza się do wykonania poniższego polecenia:
$ virtualenv ENV
ENV to bezwzględna ścieżka do katalogu w którym zostanie zainstalowane wirtualne środowisko. Lokalizacja jest dowolna, z dwoma wyjątkami:
- deployment z użyciem skryptów CGI)
- nie należy tworzyć ich wewnątrz ~/ruby/mój.vhost.pl/htdocs z powodu nadpisywania uprawnień w nim
Ilość posiadanych przez nas środowisk jest (teoretycznie) nieograniczona.
Należy zwrócić uwagę na to, że tak stworzone wirtualne środowisko korzysta z globalnego Pythona (obecnie jest to wersja 2.4). Jeżeli chcemy skorzystać z nowszego Pythona dodajemy odpowiedni parametr:
$ virtualenv -p python2.6 ENV
Możemy także stworzyć środowisko bez systemowych (standardowych) pakietów, co może być przydatne w przypadku konfliktów wersji instalowanych paczek:
$ virtualenv --no-site-packages ENV
Tak powstałe środowisko możemy wykorzystać na trzy sposoby.
- Najprostszym z nich jest aktywacja:
[bongo@stallman ~]$ source ENV/bin/activate (ENV)[bongo@stallman ~]$
Proszę zwrócić uwagę na to, że poprawna aktywacja skutkuje w poprzedzeniu znaku zachęty (prompta) nazwą środowiska.
Aktywację musimy wykonać za każdym razem kiedy chcemy skorzystać z wirtualnego Pythona
Od teraz wykonując python będziemy uruchamiać interpreter z naszej lokalnej konfiguracji, oraz będzie można swobodnie instalować nowe moduły i dodatki, które będą dostępne tylko dla nas!
Razem z virtualenv instalowany jest pakiet Setuptools, dzięki czemu w bardzo prosty sposób możemy doinstalowywać nowe paczki, np:
(ENV)$ easy_install pip
Kiedy zakończyliśmy już pracę z naszym wirtualnym Pythonem, możemy środowisko wyłączyć:
(ENV)$ deactivate
- Możemy także bezpośrednio instalować biblioteki przy pomocy easy_install:
$ ENV/bin/easy_install pip
- A skrypty uruchamiane przy pomocy "naszego" interpretera będą z tych bibliotek korzystać
$ ENV/bin/python skrypt.py
virtualenvwrapper
Virtualenvwrapper to stworzone przez Douga Hellmanna narzędzie to zarządzania wirtualnymi środowiskami. Przydatne zwłaszcza wtedy, gdy pracujemy na większej ich ilości. Więcej informacji znajdziemy na oficjalnej stronie virtualenvwrappera
Instalacja aplikacji
W tym miejscu znajdziesz informacje na temat instalacji konkretnych aplikacji. Zakładamy, że vhosty, domeny i bazy danych są już utworzone. Nasz użytkownik to bongo o uidzie 1234.
Trac
Trac to znakomity system zarządzania projektami. Szczegółowe informacje na tem konfiguracji i instalacji znajdziesz na stronie domowej projektu. Do inicjalizacji aplikacji napisanej w Pythonie za pomocą pliku passenger_wsgi.py wykorzystamy kod ze strony Trac and WSGI. Poniższe polecenia wykonujemy na serwerze stallman2 zakładając, że wcześniej skonfigurowaliśmy vhosta.
$ cd ~/ruby/trac.bongo.pl/ $ mkdir apps && cd apps $ trac-admin bongobongo initenv Creating a new Trac environment at /ruby/bongo/www/trac.bongo.pl/apps/bongobongo Trac will first ask a few questions about your environment in order to initialize and prepare the project database. Please enter the name of your project. This name will be used in page titles and descriptions. Project Name [My Project]> Bongo Bongo Please specify the connection string for the database to use. By default, a local SQLite database is created in the environment directory. It is also possible to use an already existing PostgreSQL database (check the Trac documentation for the exact connection string syntax). Database connection string [sqlite:db/trac.db]> Please specify the type of version control system, By default, it will be svn. If you don't want to use Trac with version control integration, choose the default here and don't specify a repository directory. in the next question. Repository type [svn]> Please specify the absolute path to the version control repository, or leave it blank to use Trac without a repository. You can also set the repository location later. Path to repository [/path/to/repos]> Creating and Initializing Project ... Project environment for 'Bongo Bongo' created. ... Congratulations! $ cd ../htdocs/ $ vim passenger_wsgi.py import os os.environ['TRAC_ENV'] = '/ruby/bongo/www/trac.bongo.pl/apps/bongobongo' os.environ['PYTHON_EGG_CACHE'] = '/ruby/bongo/www/trac.bongo.pl/apps/bongobongo/eggs' import trac.web.main application = trac.web.main.dispatch_request $ touch ../conf/reload
Gotowe. Po upływie minuty możemy przetestować naszą świeżą instalację wchodząc na stronę http://trac.bongo.pl:81.

