Может быть для кого-то не секрет, что в Eclipse существует возможности запуска внешних скриптов, но не все, возможно, в курсе, что эта функция может существенно облегчить жизнь разработчику использующему zc.buildaut в повседневной разработке.
Итак, что можно автоматизировать?
- Получение скрипта bootstrap.py для инициализации buildout в текущем проекте
- Начальная инициализация buildout
- Запуск buildout для заданной в корне проекта конфигурации
- Выполнение тестов из разрабатываемого пакета
- Запуск экземпляра 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 или выбрать соответствующий пункт контекстного меню в дереве проекта.
Если у вас есть предложения, замечания или варианты комманд, делитесь опытом…
Продуктивной вам работы!
4 Сентябрь 2008
Большое спасибо. Весьма полезная статья. С удовольствием читаю Ваш блог. Надеюсь, подобные статьи будут сопровождать Ваш путь изучения zope.
25 Октябрь 2008
По-моему лучше использовать переменную ${project_loc}, тогда это будет поддерживать проекты, не находящиеся внутри папки воркспейса.