Bądź: Wyszukaj na stronie z użyciem Google
reklama:

sobota, 9 maja 2009

Obsługa Python pod Apache2

Autor: , 08:08, sobota, 9 maja 2009


Python to interpretowany, interaktywny język programowania stworzony przez Guido van Rossuma w 1990. Aby zacząć pisać w nim dynamiczne strony internetowe, najlepiej mieć na własnym komputerze serwer z obsługą tego języka. Pokażę tutaj, jak to osiągnąć.

Instalacja

1) Najpierw oczywiście trzeba postawić serwer. Instalujemy więc Apache2:
sudo apt-get install apache2
2) Jeśli już mamy go postawionego, to czas zainstalować mod_python. Robimy to, wpisując w konsolę następującą komendę:
sudo apt-get install libapache2-mod-python
3) Teraz tworzymy dowiązanie:
cd /etc/apache2/mods-enabled/
sudo ln -s ../mods-available/mod_python.load mod_python.load
4) Otwieramy w edytorze plik: /etc/apache2/sites-available/default np. w taki sposób:
sudo gedit /etc/apache2/sites-available/default
5) W 10 linii powinno być coś takiego:
Options Indexes FollowSymLinks MultiViews
AllowOverride AuthConfig
Order allow,deny
allow from all
# Uncomment this directive is you want to see apache2's
# default start page (in /apache2-default) when you go to /
#RedirectMatch ^/$ /apache2-default/

Zamieniamy to na:
Options Indexes FollowSymLinks MultiViews
AllowOverride AuthConfig
Order allow,deny
allow from all

AddHandler mod_python .py
PythonHandler mod_python.publisher
PythonDebug On

# Uncomment this directive is you want to see apache2's
# default start page (in /apache2-default) when you go to /
#RedirectMatch ^/$ /apache2-default/

Teraz już restartujemy serwer:
sudo /etc/init.d/apache2 restart
Test

1)
Tworzymy plik:
sudo gedit /var/www/test.py
2) Wpisujemy:
def index(req):
return "Test successful";
3) I testujemy, wpisując w pasku przeglądarki: http://localhost/test.py

Błędy

Jeśli po restarcie serwera wyskoczy coś takiego:
$ sudo /etc/init.d/apache2 restart
* Restarting web server apache2apache2: Syntax error on line 185 of /etc/apache2/apache2.conf: Could not open configuration file /etc/apache2/mods-enabled/mod_python.load: No such file or directory
[fail]
1) To musimy stworzyć plik
/etc/apache2/mods-available/mod_python.load
Np. tak:
sudo gedit /etc/apache2/mods-available/mod_python.load
2) Dodać do niego:
LoadModule python_module /usr/lib/apache2/modules/mod_python.so
3) Tworzymy dowiązanie:
sudo ln -s /etc/apache2/mods-available/mod_python.load /etc/apache2/mods-enabled/mod_python.load
4) I restartujemy serwer:
sudo /etc/init.d/apache2 restart
W tej chwili powinno już wszystko działać. Następnym razem postaram się opisać Django, czyli framework, który służy do budowania dynamicznych stron WWW w Pythonie.
Komentarze 7 comments
Anonimowy pisze...

mod_python może był dobry kiedyś, w tym momencie jedynym rozsądnym sposobem na odpalanie aplikacji w pythonie jest wsgi - standard jesli chodzi o webowe aplikacjem, uzywane nawet przez google - i mod_wsgi.

Anonimowy pisze...

Czemu:
$ cd /etc/apache2/mods-enabled/
$ sudo ln -s ../mods-available/mod_python.load mod_python.load

Zamiast krótko?
$ sudo a2enmod python

Pozatym to polecenie: "sudo apt-get install libapache2-mod-python" samo już włączy pythona. :)

Gatto pisze...

Postaram się wkrótce opisać też mod_wsgi, tylko sam najpierw muszę się z nim zapoznać ;)

red_ag pisze...

podawaj zrodlo z ktorego korzystasz przy pisaniu takich tesktow. Bo jestem pewny, ze czytałem to samo, tylko że w języku angielskim z rok temu.

rpawlows pisze...

mod_python error wyswietla w test.py i co teraz??

rpawlows pisze...

dokładnie coś takiego:
MOD_PYTHON ERROR

ProcessId: 9347
Interpreter: '127.0.1.1'

ServerName: '127.0.1.1'
DocumentRoot: '/var/www'

URI: '/test.py'
Location: None
Directory: '/var/www/'
Filename: '/var/www/test.py'
PathInfo: ''

Phase: 'PythonHandler'
Handler: 'mod_python.publisher'

Traceback (most recent call last):

File "/usr/lib/python2.6/dist-packages/mod_python/importer.py", line 1537, in HandlerDispatch
default=default_handler, arg=req, silent=hlist.silent)

File "/usr/lib/python2.6/dist-packages/mod_python/importer.py", line 1229, in _process_target
result = _execute_target(config, req, object, arg)

File "/usr/lib/python2.6/dist-packages/mod_python/importer.py", line 1128, in _execute_target
result = object(arg)

File "/usr/lib/python2.6/dist-packages/mod_python/publisher.py", line 204, in handler
module = page_cache[req]

File "/usr/lib/python2.6/dist-packages/mod_python/importer.py", line 1059, in __getitem__
return import_module(req.filename)

File "/usr/lib/python2.6/dist-packages/mod_python/importer.py", line 296, in import_module
log, import_path)

File "/usr/lib/python2.6/dist-packages/mod_python/importer.py", line 680, in import_module
execfile(file, module.__dict__)

File "/var/www/test.py", line 2

return "Test successful";

^

IndentationError: expected an indented block


MODULE CACHE DETAILS

Accessed: Sun Jan 31 00:46:59 2010
Generation: 0

_mp_27cc55c5447f9e0aa13691719290c225 {
FileName: '/var/www/test.py'
Instance: 1 [IMPORT]
Generation: 0 [ERROR]
Modified: Sun Jan 31 00:10:31 2010
}

jesli ktos wie co z tym zrobić prosze o pomoc

dk3 pisze...

widzę ze nikt koledze pomóc nie chce :)
chodzi o to że musisz dać odstęp TAB przed return i będzie wszystko działać ;)

Prześlij komentarz


Popularne posty

Etykiety