2017-06-16 1 views
0

J'utilise travis-ci.org pour tester un module Node.js. Il utilise le dernier paquet pg pour accéder à une base de données PostgreSQL."Autorisation refusée" à l'aide de PostgreSQL COPY dans Travis-CI

Les tests d'intégration doivent utiliser la commande Postgres copy (à partir d'une transaction ... pas de psql \copy) pour remplir une table temporaire avec un certain CSV données. Tout passe localement ... mais en cours d'exécution sur Travis-CI je frappe:

"COPY some_table(column_a,column_b) FROM 
'/home/travis/build/my_org/my_repo/test/fixtures/some_file.csv' CSV HEADER;" 
{ error: could not open file 
"/home/travis/build/my_org/my_repo/test/fixtures/some_file.csv" for reading: 
Permission denied 
    at Connection.parseE 
(/home/travis/build/my_org/my_repo/node_modules/pg/lib/connection.js:567:11) 
    at Connection.parseMessage name: 'error', 
... 

donc un fichier Permission denied est la chose. Mes compétences noob Linux me disent que le fichier existe à cet endroit. J'ai essayé chmod en 777, mais cela n'a eu aucun effet.

Je me connecte à Postgres Travis avec la chaîne:

postgres://postgres:[email protected]:5432 
bien

Et tout est avec cela. Une chose, je ne PostgreSQL besoin v9.6, donc mon fichier .travis.yml ressemble à:

language: node_js 

node_js: 
    - "6" 

services: 
    - postgresql 

addons: 
    postgresql: "9.6" 

sudo: false 
dist: trusty 

... qui a beaucoup travaillé dans le passé, mais c'est la première fois que j'ai jamais eu pour utiliser copy.

Je suppose que c'est quelque chose à voir avec l'utilisateur que Postgres exécute en quelque sorte?

Toute aide très chaleureusement reçue!

Tim

Répondre

0

En fait, je suis tombé sur cette question quand je travaillais sur une base de code hérité qui utilisait l'ancienne infrastructure Travis (basée sur Ubuntu précise) et je voulais le mettre à jour Trusty. L'image basée sur Precise n'a eu aucun problème à lire un fichier du répertoire home de travis - peut-être que le serveur PostgreSQL fonctionnait en tant qu'utilisateur travis, pas en postgres, mais sur Trusty, ce n'était pas le cas et j'ai eu cette erreur.

L'utilisation de chmod sur le fichier lui-même ne suffit pas, le serveur ne peut toujours pas lire à partir du répertoire de base travis. Vous pouvez donc créer un fichier en utilisant mktemp, y copier votre fichier, changer ces permissions en 666 en utilisant chmod. Maintenant vous êtes capable de le lire en utilisant PostgreSQLs COPY FROM.

+0

Merci @MichielB, a travaillé un charme! –