Как запустить Byteflow на Jython

В последнее время очень активно ведется работа над созданием новых языков и портированием существующих на платформу Java. Многие аналитики утверждают что за этими языками будуйщее. Одним из таких языков стал Python. Его порт, работающий на JVM, называется Jython.

Я уже писал о портировании различных web-фреймворков на Jython, описывал проблемы запуска Trac на Jython, а сегодня я расскажу о успешном опыте запуска популярного blog-engine Byteflow на Jython.

Byteflow использует для своей работы Django, согласно многим источникам в интернет этот популярный web-framework успешно портирован на Jython этим летом.

Этап первый, подготовительный (установка Java, Jython, Django):

Я надеюсь у вас уже установлена Java (рекомендую использовать 6ую версию от SUN, т.к. я не пробовал еще запускать Jython на OpenJDK).

Ставим Jython (в данный момент последней версией является 2.5b0), рекомендую использовать последнюю “стабильную”: $wget http://kent.dl.sourceforge.net/sourceforge/jython/jython_installer-2.5b0.jar $java -jar jython_installer-2.5b0.jar

Вот тут, если у вас на машине не стоит X-сервер, могут возникнуть первые проблемы: java.awt.HeadlessException: No X11 DISPLAY variable was set, but this program performed an operation which requires it.

С помощью гугля и здравого смысла находим способ запустить консольную версию инсталятора: $java -jar jython_installer-2.5b0.jar --console

Сразу после установки нам нужно дать права на исполнение интерпритатору Jython: $chmod +x /mnt/data/java/jython2.5b0/bin/jython
Проверяем работоспособность Jython: $ /mnt/data/java/jython2.5b0/bin/jython
Jython 2.5b0 (trunk:5540, Oct 31 2008, 13:55:41) [Java HotSpot(TM) Client VM (Sun Microsystems Inc.)] on java1.6.0_04

Установка Django:

Django с версии 1.0 официально работает на Jython, поэтому скачиваем последнюю стабильную версию (в данный момент ею является 1.0.2) и устанавливаем её с помощью Jython: $wget http://www.djangoproject.com/download/1.0.2/tarball/ $tar xjvf Django-1.0.2-final.tar.gz $cd Django-1.0.2-final $jython setup.py install
Процесс сборки Django может затянуться на несколько минут, но в результате все должно собраться без каких-либо ошибок и проблем.

Этап второй, запуск Byteflow:

Byteflow активно развивается, поэтому лучше всего брать текущую версию из репозитария:

$hg clone http://hg.piranha.org.ua/byteflow/ $cd byteflow

Согласно инструкции по установке вносим необходимые изменения в settings_local.py и пытаемся инициализировать БД:

jython manage.py syncdb Traceback (most recent call last): File "manage.py", line 11, in <module> execute_manager(settings) .... File "/mnt/data/java/jython2.5b0/Lib/site-packages/django/db/backends/mysql/base.py", line 13, in <module> raise ImproperlyConfigured("Error loading MySQLdb module: %s" % e) django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named MySQLdb

Проблема заключается в том что для Jython необходимо использовать специальные class-wrapper для работы с БД, т.к. низкоуровневой работы с БД используется JDBC драйверы для Java. Поэтому мы не можем использовать стандартные python реализации DBAPI.

Для решения проблем с database backend мы воспользуемся проектом django-jython, в рамках которого были разработканы Jython DB2 API wrapper для PostgreSQL и SqLite3. Устанавливаем последнюю версию из svn: $svn co http://django-jython.googlecode.com/svn/trunk/ django-jython $cd django-jython $jython setup.py install

В данный момент MySQL не поддерживается, но работа ведется и возможно скоро уже будет реализован wrapper и для MySQL.

Для использования нашего backend’а в byteflow надо изменить переменную DATABASE_ENGINE: DATABASE_ENGINE = 'doj.backends.zxjdbc.postgresql' # variants: mysql, sqlite3 Вновь пробуем инициализировать БД, и вновь получаем ошибку: `

$jython manage.py syncdb Error: No module named BeautifulSoup `

Скачиваем и устанавливаем BeautifulSoup для Jython: $wget http://www.crummy.com/software/BeautifulSoup/download/BeautifulSoup.tar.gz $tar xzvf BeautifulSoup.tar.gz $cd BeautifulSoup-3.0.7a $jython setup.py install

В процессе сборки возникает некоторое количество ошибок при прохождении внутренних тестов, но в данный ммоент мы на это внимание не обращаем.

Теперь вновь запускаем инициализацию БД: $jython manage.py syncdb zxJDBC.DatabaseError: driver [org.postgresql.Driver] not found

Данная ошибка говорит нам о том что нужно установить jdbc драйвер для PostgreSQL. Опять идем на сайт разработчиков и выбираем подходящий драйвер, я рекомендую взять стабильный 8.3 JDBC 3: $wget http://jdbc.postgresql.org/download/postgresql-8.3-604.jdbc3.jar

Теперь можно вновь запустить инициализацию БД (но теперь мы это делаем некоторым изощренным способом): $/usr/bin/java -classpath /opt/java/jython2.5b0/jython-complete.jar:/home/blaze/Desktop/postgresql-8.3-604.jdbc3.jar -Dpython.home="$JYTHON_HOME" org.python.util.jython manage.py syncdb

Перед выполнением следующего этапа нам необходимо создать пользователя и БД для byteflow. О создании пользователя лучше читать в руководстве PostgreSQL, я создал пользователя следующими командами(необходимо выполнять из-под пользователя postgres):

$createuser byteflow -P -S -D -R $createdb byteflow -O byteflow

После этого БД должна инициализировать успешно, и мы можем переходить к запуска тестового сервера:

$/usr/bin/java -classpath /opt/java/jython2.5b0/jython-complete.jar:/home/blaze/Desktop/postgresql-8.3-604.jdbc3.jar -Dpython.home="$JYTHON_HOME" org.python.util.jython manage.py runserver

В качестве дополнения хочу отметить что для корректной работы Byteflow необходимо еще установить модуль ElementTree, у которого уже есть порт на Jython : $svn checkout http://jython-elementtree.googlecode.com/svn/trunk elementtree $cd elementtree $jython setup.py install --stdlib

модуль openid: $wget "http://openidenabled.com/files/python-openid/packages/python-openid-2.2.1.tar.bz2" $jar xzvf python-openid-2.2.1.tar.bz2 $cd python-openid-2.2.1 $jython setup.py install

А также необходимо отключить catpcha в настройках Byteflow, либо использовать recaptcha, т.к. для работы она требует PIL, которая не портирована на Jython. Возможно будет работать вариант с recatpha, но это надо проверить.

Ссылки по теме:
 Distribs:

Modules:

Articles:

Add post to:   Delicious Reddit Slashdot Digg Technorati Google
Make comment

Comments

locke23rus 19.05.2009 21:57
avatar

Не могли бы вы рассказать про используемые ресурсы(память, проц)? И еще хотелось бы узнать ваше мнение по поводу запуска боевого сервера на tomcat/jython вместо apache/mod_wsgi. Заранее спасибо =)

Required. 30 chars of fewer.

Required.

captcha image Please, enter symbols, which you see on the image