Сегодня вышел Google App Engine 1.5.0. Кроме большого числа пофикшенных багов, появилось несколько достаточно интересных изменений.

Среди них стоит отметить такие:

 

  • Backends - постоянно запущенный инстанс одной из четырех конфигураций, который не связан с запросами (http requests) и может занимать до 1GB памяти. Один из способов применения - генерация отчетов, которая занимает много времени или другие ресурсоемкие задач
  • Изменения в Task Queue - поддержка pull-запросов, увеличение лимита на используемую память
  • Размер HTTP Request и Response увеличен до 32MB
  • High Replication Datastore теперь является хранилищем по умолчанию для новых приложений
  • Много изменений, связанных с квотами - некоторые были увеличены, а некоторые, наоборот - уменьшены
  • К моему сожалению, Full Text Search еще не закончили :(. 

 

 Отдельным пунктом хочу отметить экспериментальную поддержку языка программирования Go. Новости об этом языке, в основном, проходили мимо меня и я только иногда слышал упоминания о нем. Теперь же, когда Google добавил пусть и эксперементальную, но все-же поддержку, то многие захотят посмотреть на него более внимательно. Особенно, учитывая то, что он создан для ресурсо(процессоро)-емких задач будет компилироваться в native code.

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

 

 

 

 P.S. Интересно, насколько будет популярен Go в Украине через полгода-год, по сравнению с Python и Ruby?


Проблема с использованием разных версий софта практически настолько же стара как мир разработки этого самого софта. Смотря со стороны разработчика, то самый простой случай - это когда нужно пофиксить какие-либо баги в предыдущей версии. Проблема заключается в том, что для dev environment уже используется более новая версия python, django и/или другого, необходимого для проекта, ПО. В более “тяжелом” случае все становится еще интересней: в production одно, на stage -  другое, на машине разработчика - третье, а тут еще нужно писать под google app engine, для которого требуются специфические (старые) версия python/django. 

Первой моей идеей было поднять разные виртуалки для тестирования, но немного погуглив наткнулся на такую замечательную вещь, как virtualenv. Как написано на оффициальном сайте - “virtualenv is a tool to create isolated Python environments”, что в переводе звучит, примерно, так: “virtualenv - приложение для созданий изолированных рабочих сред для python”. Таким образом вы можете создать несколько окружений с разными версиями python и/или других библиотек. 

Установка virtualenv ничем не отличается от установки любой библиотеки, написанной на python. В моем случае установка выглядила так:

sudo easy_install virtualenv

После установки virtualenv процесс создание виртуального окружения состоит всего лишь из одной команды:

virtualenv -p /usr/bin/python2.5 ./gae/

Здесь с помощью параметра -p я указал версию python, которую необходимо использовать для виртуального окружения. Последним параметром идет путь к  директории, в которой необходимо все создать. Так же рекомендуется добавлять параметр --no-site-packages, для того, чтобы из виртуального окружения не было доступа к пакетам из “реальной” среды (из встроенной справки: Don't give access to the global site-packages dir to the virtual environment). У себя этот параметр я не использовал по следующей причине: на рабочем PC mbp я использую такую схему библиотек:

  • последняя версия python и необходимых библиотек устанавливается обычным образм, без virtualevn;
  • если для каких-то причин необходимы другие версии интерпретатора или библиотек - создаю virtualenv;
  • в virtualenv доустанавливаю только те библиотеки, версии которых должны отличаться от реальной среды моей ОС (в моем случае - необходимо использовать более старую версию).

Теперь, после создания virtualenv появилась такая структура папок:

bin include lib

В Windows-like OS структура папок может немного отличаться.

$ python --version

Python 2.6.5

$  ./bin/python --version

Python 2.5.4

Например, мне нужно запустить GAE-приложение с использованием django.  Если я его запущу в текущей конфигурации моей рабочей машины, то получу следеющую ошибку:

UnacceptableVersionError: django 1.0 was requested, but 1.2.1.final.0 is already in use.

Поэтому, мне необходимо установить django 1.0 в созданное виртуальное окружение. Описывать процесс загрузки и распаковки не буду, надеюсь, с этим справятся все, а перейду сразу у описанию установки.

Для переключения в виртуальное окружение проще всего использовать скрипт activate, который лежит в каталоге bin нашего  vitrualevn:

e0ne-macbook:gae e0ne$ source bin/activate

(gae)e0ne-macbook:gae e0ne$ python --version

Python 2.5.4

Для выхода из виртуального окружения существует команда deactivate:

(gae)e0ne-macbook:gae e0ne$ deactivate 

e0ne-macbook:gae e0ne$ 

Перейдем непосредственно к установке djngo в созданное виртуальное окружение. Установка любого python-пакета в virtualenv ничем не отличается от обычного процесса установки и выполняется всем знакомой командой:

(gae)e0ne-macbook:Django-1.0.4 e0ne$ python setup.py install

Теперь у меня есть 2 полноценных рабочих среды с простым и быстрым переключением между ними.

Я описал лишь базовые возможности пакета virtualenv, но и этого вполне достаточно для того, чтобы увидеть всю его мощь, спрятанную я простым и понятным интерфейсом. Как всегда, все подробности на оффициальной странице: http://pypi.python.org/pypi/virtualenv