2015-07-30 15 views
12

Sto provando a configurare CI per alcune procedure PL/Python PostgreSQL in Travis CI.Come testare le procedure PostgreSQL Pl/Python con Travis CI?

Ho provato diversi modi:
1) Con l'infrastruttura legacy ho cercato di assumere solo, che PL/Python è già installato, ma non era successo:

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) Ho provato ad aggiungere i comandi sudo apt-get update && sudo apt-get -y install postgresql-plpython-9.4 all'inizio. Ed è stato anche fallito, perché questo comando ha avviato la sostituzione di PostgresSQL 9.4, che viene già installato nell'ambiente di Travis.

Travis build.

3) ha cercato anche di usare un'infrastruttura basata su container con questo righe nel config:

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

Nessun successo troppo.

Qual è il modo migliore per testare la procedura PL/Python in Travis CI?

+0

Perché pensi che non funzioni per l'opzione 2? Travis [docs] (http://docs.travis-ci.com/user/installing-dependencies/) è chiaro che l'aggiornamento dei pacchetti prima che l'installazione sia la cosa giusta da fare quando si installano le dipendenze ... –

+0

@PeterBrittain Conflitto in qualche modo con PostgreSQL esistente. Vedi l'aggiornamento, Ive ha allegato il registro di tale build. –

+1

Sembra che l'aggiornamento si stia rifiutando perché la tua vecchia versione di Postgres è ancora in esecuzione ... Hai provato a fermare Postgres prima del tentativo di aggiornamento? –

risposta

5

sono stato in grado di ottenere il python-tempo build working con il seguente .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();' 

tua eredità tentativi di configurazione ha avuto una serie di problemi, tra cui non fermare l'esistente di PostgreSQL 9.1 esempio prima di installare 9.4 e non specificando il linguaggio plpython correttamente. Credo che alcuni comandi non venissero eseguiti come utenti corretti. Tutti i problemi sono risolti dalla configurazione di cui sopra. Ci possono essere dei modi in cui questa configurazione può essere migliorata, ma mi sono fermato una volta che ho funzionato.

La configurazione basata sul contenitore non funziona perché postgresql-plpython-9.4 non è attualmente nello whitelist of pre-approved packages. Tuttavia, postgresql-plpython-9.5, quindi, se si desidera eseguire la migrazione a una configurazione basata su container, è possibile provare following the package approval process per postgresql-plpython-9.4 o attendere il GA release of PostgreSQL 9.5 e provare a eseguire la migrazione.

+0

Se si utilizza l'infrastruttura basata su container, come si fermerebbe PostgrteSQL prima di installare i pacchetti 'postgresql-plpython-9.4' o' postgresql-plpython-9.5'? –

+0

@GillBates Non ho provato la configurazione con una configurazione basata su container perché ho visto che 'postgresql-plpython-9.4' non era un pacchetto pre-approvato. Direi che se fosse stato pre-approvato e che tu avessi usato la configurazione dall'opzione 3, quel Travis sarebbe stato abbastanza intelligente da sapere quando fermarsi e avviare PostgreSQL. Se non è abbastanza intelligente, considererei un bug con Travis e non saprei come fermare PostgreSQL in quello scenario, perché anche gli attuali documenti di Travis usano 'sudo' per fermare PostgreSQL: http: //docs.travis -ci.com/user/database-setup/#PostgreSQL – heenenee

3

io non conosco i dettagli esattamente, ma, se si mette i file nel posto giusto, si può chiamare dalla procedura stessa

import fileName.className 

o

import methodName from fileName.className 

Edit: Ho cercato, basta metterlo nella stessa directory del programma che stai usando (cmd, idle, ect.) E chiamarlo, o metterlo in una cartella e aggiungere il nome della cartella al codice

es. .

import folder/fileName.ClassName 
4

Conversione miei commenti precedenti per una risposta, ora che è stato confermato ...

Come documentato nel Travis docs, il modo giusto per installare questo è quello di aggiornare le dipendenze in fase di before_install (molto simile opzione 2 nella tua lista).

L'unico problema sembra essere che non hai fermato Postgres prima dell'aggiornamento.