2015-07-30 11 views
12

Próbuję skonfigurować CI dla niektórych procedur PL/Python PostgreSQL w Travis CI.Jak przetestować procedury Pl/Python PostgreSQL za pomocą Travis CI?

próbowałem kilka sposobów:
1) z infrastrukturą starszego Starałem się po prostu założyć, że PL/Python jest już zainstalowany, ale to nie uda:

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) Na początku próbowałem dodać polecenia sudo apt-get update && sudo apt-get -y install postgresql-plpython-9.4. A także nie udało się, ponieważ polecenie to zainicjowało wymianę PostgreSQL 9.4, która jest już zainstalowana w środowisku Travis.

Travis build.

3) również próbował użyć kontenera infrastruktury opartej Dzięki tej linii w config:

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

bez powodzenia też.

Jaki jest dobry sposób na przetestowanie procedury PL/Python w Travis CI?

+0

Dlaczego uważasz, że nie działa opcja 2? Travis [docs] (http://docs.travis-ci.com/user/installing-dependencies/) są jasne, że aktualizowanie pakietów przed instalacją jest rzeczą właściwą do zrobienia podczas instalowania zależności ... –

+0

@PeterBrittain To jakoś się kłóci z istniejącym PostgreSQL. Zobacz aktualizację, Ive dołączony dziennik takiej kompilacji. –

+1

Wygląda na to, że uaktualnienie się nie zgadza, ponieważ stara wersja Postgrena wciąż działa. Czy próbowałeś zatrzymać PostgreSQL przed próbą aktualizacji? –

Odpowiedz

5

udało mi się uzyskać python-tempo build working z następujących .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();' 

Twoje dziedzictwo próby konfiguracji miał wiele kwestii, w tym nie zatrzymując istniejącą PostgreSQL 9.1 wystąpienie przed instalacją 9.4, a nie podania poprawnie język plpython. Uważam, że niektóre polecenia również nie były uruchamiane jako poprawny użytkownik. Wszystkie problemy rozwiązuje powyższa konfiguracja. Mogą istnieć sposoby na ulepszenie tej konfiguracji, ale zatrzymałem się, gdy już ją uruchomiłem.

Konfiguracja oparta na kontenerach nie będzie działać, ponieważ postgresql-plpython-9.4 nie jest obecnie w wersji whitelist of pre-approved packages. Jednak jest to postgresql-plpython-9.5, więc jeśli chcesz przeprowadzić migrację do konfiguracji opartej na kontenerze, możesz wypróbować following the package approval process dla postgresql-plpython-9.4 lub poczekać na GA release of PostgreSQL 9.5 i spróbować przeprowadzić migrację.

+0

Jeśli korzystasz z infrastruktury kontenerowej, w jaki sposób zatrzymasz PostgrteSQL przed instalacją pakietów 'postgresql-plpython-9.4' lub' postgresql-plpython-9.5'? –

+0

@GillBates Nie próbowałem wykonywać konfiguracji z konfiguracją opartą na kontenerach, ponieważ zobaczyłem, że 'postgresql-plpython-9.4' nie był wstępnie zatwierdzonym pakietem. Domyślam się, że jeśli został wcześniej zatwierdzony i użyłeś konfiguracji z opcji 3, to Travis byłby wystarczająco inteligentny, by wiedzieć, kiedy zatrzymać i uruchomić PostgreSQL. Jeśli nie jest wystarczająco inteligentny, rozważę błąd w Travisie i nie będę wiedział, jak zatrzymać PostgreSQL w tym scenariuszu, ponieważ nawet aktualne dokumenty Travis używają 'sudo' do zatrzymywania PostgreSQL: http: //docs.travis -ci.com/user/database-setup/#PostgreSQL – heenenee

3

Nie znam dokładnie szczegółów, ale jeśli umieścić pliki w odpowiednim miejscu, można nazwać to z procedury samego

import fileName.className 

lub

import methodName from fileName.className 

Edit: Sprawdziłem, po prostu umieść go w tym samym katalogu co program, którego używasz (cmd, bezczynność, itd.) I wywołaj go lub umieść w folderze i dodaj nazwę folderu do kodu

np. .

import folder/fileName.ClassName 
4

Konwersja moje wcześniejsze uwagi na odpowiedź teraz, że to zostało potwierdzone ...

Jak udokumentowano w Travis docs, w odpowiedni sposób, aby zainstalować to zaktualizować zależności na etapie before_install (podobnie jak w opcji 2 na twojej liście).

Jedyny problem polega na tym, że nie zatrzymałeś PostgreSQL przed uaktualnieniem.