Автоматизация zc.buildout/PyDev/Eclipse - запуск скриптов

Опубликовано Fal'K°: 04.08.2008 в 02:09

Может быть для кого-то не секрет, что в Eclipse существует возможности запуска внешних скриптов, но не все, возможно, в курсе, что эта функция может существенно облегчить жизнь разработчику использующему zc.buildaut в повседневной разработке.

Итак, что можно автоматизировать?

  1. Получение скрипта bootstrap.py для инициализации buildout в текущем проекте
  2. Начальная инициализация buildout
  3. Запуск buildout для заданной в корне проекта конфигурации
  4. Выполнение тестов из разрабатываемого пакета
  5. Запуск экземпляра Zope

Теперь по пунктам. Замечу, что во многом настройки для каждого пункта схожи между собой, я укажу наиболее приемлемый на мой взгляд вариант, но вы не стесняйтесь пробовать различные варианты как вам необходимо.

Для примера возьмем следующий файл конфигурации buildout.cfg

[buildout]
develop = .
parts = pydev test application instance

[test]
recipe = zc.recipe.testrunner
eggs = ncstu.ts.app [test]
#versions = versions

[pydev]
recipe = pb.recipes.pydev
pydevproject_path = ${buildout:directory}/.pydevproject
eggs = ${test:eggs}

[zope3]
location =

[application]
recipe = zc.zope3recipes:app
site.zcml =
         <include package=”ncstu.ts.app” file=”application.zcml” />

eggs = ncstu.ts.app

[instance]
recipe = zc.zope3recipes:instance
application = application
zope.conf = ${database:zconfig}

[database]
recipe = zc.recipe.filestorage

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

[buildout]
develop = .
parts = pydev test

[test]
recipe = zc.recipe.testrunner
eggs = ncstu.ts.app [test]
#versions = versions

[pydev]
recipe = pb.recipes.pydev
pydevproject_path = ${buildout:directory}/.pydevproject
eggs = ${test:eggs}

Этот или приведенный выше файл следует создать в корне проекта прежде чем выполнять настроенные ниже команды запуска.

1. Получение скрипта bootstrap.py для инициализации buildout в текущем проекте

Будем считать, что у нас есть созданный проект и в данный момент он является текущим. Нам необходимо получить скрипт bootstrap.py из внешнего репозитория. Вы конечно можете скопировать вручную имеющуюся у вас копию, но ведь тема этой статьи автоматизация, да и свежая версия скрипта никогда не помешает.

В меню Eclipse открываем диалог настройки по следующему пути:

Run -> External Tools -> External Tools Configurations …

Жмем на кнопку добавления новой конфигурации запуска слева вверху. Далее заполняем поля как указано ниже:

Имя команды [Name]: Установить buildout

Вкладка [Main]:

  • Location: /usr/bin/svn
  • Working Directory: ${workspace_loc}/${project_name}
  • Arguments: co svn://svn.zope.org/repos/main/zc.buildout/trunk/bootstrap

Вкладка [Refresh]:

  • Refresh resources upon completion
  • The project containing the selected resource
  • Recusively include sub-folders

Вкладка [Build]:

  • Build befire launch
  • The project containing selected resource
  • Include referenced projects

Вкладка [Common]:

  • Display in favorites menu (укажите меню, например External Tools)

Применяем изменения и снова жмем кнопку добавления новой конфигурации запуска (слева вверху). И так для каждого пункта о которых я говорил вначале. Далее я просто приведу содержание полей для каждого из них.

2.  Начальная инициализация buildout

Имя команды [Name]: Инициализировать buildout

Вкладка [Main]:

  • Location: /usr/bin/python2.4
  • Working Directory: ${workspace_loc}/${project_name}
  • Arguments: ${workspace_loc}/${project_name}/bootstrap/bootstrap.py

Вкладка [Refresh]:

  • Refresh resources upon completion
  • The project containing the selected resource
  • Recusively include sub-folders

Вкладка [Build]:

  • Build befire launch
  • The project containing selected resource
  • Include referenced projects

Вкладка [Common]:

  • Display in favorites menu (укажите меню, например External Tools)

Применяем изменения и снова жмем кнопку добавления новой конфигурации запуска (слева вверху).

3.  Запуск buildout для заданной в корне проекта конфигурации

Имя команды [Name]: Выполнить buildout

Вкладка [Main]:

  • Location: ${workspace_loc}/${project_name}/bin/buildout
  • Working Directory: ${workspace_loc}/${project_name}
  • Arguments:

Вкладка [Refresh]:

  • Refresh resources upon completion
  • The project containing the selected resource
  • Recusively include sub-folders

Вкладка [Build]:

  • Build befire launch
  • The project containing selected resource
  • Include referenced projects

Вкладка [Common]:

  • Display in favorites menu (укажите меню, например External Tools)

Применяем изменения и снова жмем кнопку добавления новой конфигурации запуска (слева вверху).

4. Выполнение тестов из разрабатываемого пакета

Имя команды [Name]: Выполнить тесты

Вкладка [Main]:

  • Location: ${workspace_loc}/${project_name}/bin/test
  • Working Directory: ${workspace_loc}/${project_name}
  • Arguments:

Вкладка [Refresh]:

  • Refresh resources upon completion
  • The project containing the selected resource
  • Recusively include sub-folders

Вкладка [Build]:

  • Build befire launch
  • The project containing selected resource
  • Include referenced projects

Вкладка [Common]:

  • Display in favorites menu (укажите меню, например External Tools)

Применяем изменения и снова жмем кнопку добавления новой конфигурации запуска (слева вверху).

5. Запуск экземпляра Zope

Имя команды [Name]: Запустить экземпляр Zope в активном режиме

Вкладка [Main]:

  • Location: ${workspace_loc}/${project_name}/bin/instance
  • Working Directory: ${workspace_loc}/${project_name}
  • Arguments: fg

Вкладка [Refresh]:

  • Refresh resources upon completion
  • The project containing the selected resource
  • Recusively include sub-folders

Вкладка [Build]:

  • Build befire launch
  • The project containing selected resource
  • Include referenced projects

Вкладка [Common]:

  • Display in favorites menu (укажите меню, например External Tools)

Применяем изменения и закрываем диалог настройки.

Следует заметить, что данная конфигурация запустит экземпляр Zope в активном режиме (атрибут fg). Т.е. весь стандартный вывод экземпляра, предупреждения, ошибки и т.п. будут выводиться прямо в консоль Eclipse, это удобно при отладке приложения. Остановить сервер можно нажав красный квадратик в консоли.

Можно создать несколько подобных конфигураций для разных режимов запуска экземпляра Zope, они приведены ниже:

Имя Атрибут Примечание
Zope - запустить (активный режим) fg Вывод в консоль
Zope - запустить (фоновый режим) start Работает независимым фоновым процессом
Zope - остановить stop Останавливает фоновый процесс
Zope - перезапустить restart Перезапускает фоновый процесс
Zope - статус status Выводит состояние фонового процесса
Zope - помощь help Справка по возможным аргумантам

Используя эту таблицу вы сами можете создать соответствующие команды описанным выше способом.

Возможно в особых случаях вам понадобится прервать работу всех процессов zope, может это излишне радикальное решение, но иногда необходимо. Осторожно! Эта команда остановит все экземпляры Zope, запущенные на вашем компьютере! Вот конфигурация для этого случая:

Имя команды [Name]: Zope - прервать

Вкладка [Main]:

  • Location: /usr/bin/killall
  • Working Directory:
  • Arguments: -s TERM -q runzope

Остальные параметры не имеют значения.

Запуск команд

Теперь, находясь в искомом проекте (выделить сам проект либо один из его ресурсов слева) можно запустить одну из настроенных нами выше команд просто выбрав из быстрого списка:

Run -> External Tools -> …

В зависимости от производительности вашего компьютера в первые секунды вы не заметите никаких изменений, потом активизируется консоль, в которую будет выводится результат выполнения команды. И не забудьте обновить дерево проектов если ваша команда изменяет структуру проекта, это можно сделать нажав F5 или выбрать соответствующий пункт контекстного меню в дереве проекта.

Если у вас есть предложения, замечания или варианты комманд, делитесь опытом…

Продуктивной вам работы! :)

Комментарии (2)

  1. makevnin
    4 Сентябрь 2008

    Большое спасибо. Весьма полезная статья. С удовольствием читаю Ваш блог. Надеюсь, подобные статьи будут сопровождать Ваш путь изучения zope.

  2. Даниил
    25 Октябрь 2008

    По-моему лучше использовать переменную ${project_loc}, тогда это будет поддерживать проекты, не находящиеся внутри папки воркспейса.

Оставить комментарий

Вход по OpenID

Стандартный вход

Опции:

Размер

Цвета