Как протестировать Pl / Python PostgreSQL с помощью Travis CI?

12

Я пытаюсь настроить CI для некоторых процедур PostgreSQL PL/Python в Travis CI.

Я пробовал несколько способов:
1) С устаревшей инфраструктурой я попытался просто предположить, что PL/Python уже установлен, но это не удалось:

The command "psql -U postgres -c 'CREATE EXTENSION plpythonu;'" exited with 1.
0.01s$ psql -U postgres -d test -c 'CREATE LANGUAGE plpythonu;'
ERROR:  could not access file "$libdir/plpython2": No such file or directory  

2) Попробовали добавить команды sudo apt-get update && sudo apt-get -y install postgresql-plpython-9.4 в начале. И он также потерпел неудачу, потому что эта команда инициировала замену PostgresSQL 9.4, которая уже установлена ​​в среде Travis.

сборка Travis.

3) Также попытался использовать инфраструктуру на основе контейнера с этими строками в config:

addons:
  postgresql: "9.4"
  apt:
    packages:
      - postgresql-plpython-9.4

Успех тоже.

Каков хороший способ протестировать процедуру PL/Python в Travis CI?

  • 0
    Как вы думаете, почему это не подходит для варианта 2? Документы Travis ясно показывают , что обновление пакетов перед установкой - это то, что нужно делать при установке зависимостей ...
  • 0
    @PeterBrittain Это как-то конфликтует с существующим PostgreSQL. Смотрите обновление, я прикрепил журнал такой сборки.
Показать ещё 1 комментарий
Теги:
continuous-integration
travis-ci
plpython

3 ответа

5
Лучший ответ

Мне удалось создать python-tempo build со следующими .travis.yml:

sudo: required
language: python
before_install:
  - sudo apt-get -qq update
  - sudo /etc/init.d/postgresql stop
  - sudo apt-get install -y postgresql-9.4
  - sudo apt-get install -y postgresql-contrib-9.4 postgresql-plpython-9.4
  - sudo -u postgres createdb test
  - sudo -u postgres createlang plpython2u test
  - sudo pip install jinja2
script:
  - >
      sudo -u postgres psql -d test -c 'CREATE OR REPLACE FUNCTION py_test()
                                   RETURNS void LANGUAGE plpython2u AS $$
                                     import jinja2
                                   $$;'
  - sudo -u postgres psql -d test -c 'SELECT py_test();'

У ваших предыдущих попыток конфигурации были различные проблемы, в том числе не останавливать существующий экземпляр PostgreSQL 9.1 перед установкой 9.4 и не указывать язык plpython должным образом. Я считаю, что некоторые команды также не запускались как правильный пользователь. Все проблемы устраняются вышеуказанной конфигурацией. Могут быть способы, в которых эта конфигурация может быть улучшена, но я остановился, как только я ее заработал.

Контейнерная конфигурация не будет работать, потому что postgresql-plpython-9.4 в настоящее время не находится в белом списке предварительно одобренных пакетов. Тем не менее, postgresql-plpython-9.5, поэтому, если вы хотите перейти на конфигурацию на основе контейнера, вы можете попробовать после процесса утверждения пакета для postgresql-plpython-9.4 или дождаться выпуск GA PostgreSQL 9.5 и попробуйте выполнить миграцию.

  • 0
    Если вы используете инфраструктуру на основе контейнеров, как бы вы остановили PostgrteSQL перед установкой postgresql-plpython-9.4 или postgresql-plpython-9.5 ?
  • 0
    @GillBates Я не пытался выполнить настройку с конфигурацией на основе контейнера, потому что увидел, что postgresql-plpython-9.4 не был предварительно одобренным пакетом. Я предполагаю, что если бы он был предварительно одобрен и вы использовали конфигурацию из варианта 3, то Трэвис был бы достаточно умен, чтобы знать, когда остановиться и запустить PostgreSQL. Если он недостаточно умен, я бы посчитал это ошибкой в Travis, и я не знал бы, как остановить PostgreSQL в этом сценарии, потому что даже в современных документах Travis используется sudo для остановки PostgreSQL: docs.travis-ci.com/user / базы данных установки / # PostgreSQL
4

Преобразование моих предыдущих комментариев в ответ теперь, когда оно было подтверждено...

Как указано в Travis docs, правильный способ установить это - обновить свои зависимости на этапе before_install (как вариант 2 в ваш список).

Единственная проблема заключается в том, что вы не остановили Postgres перед обновлением.

3

Я точно не знаю деталей, но если вы поместите файлы в нужное место, вы можете вызвать их из самой процедуры

import fileName.className

или

import methodName from fileName.className

Изменить: я просмотрел его, просто поместил его в тот же каталог, что и работающая программа (cmd, idle, ect.), и вызовите его, или поместите в папку и добавьте имя папки в код

например.

import folder/fileName.ClassName

Ещё вопросы

Сообщество Overcoder
Наверх
Меню