2017-06-16 26 views
0

我使用travis-ci.org來測試Node.js模塊。 它使用最新的pg包來訪問PostgreSQL數據庫。使用PostgreSQL的「權限被拒絕」在Travis-CI中複製

集成測試需要使用的Postgres copy命令(從事務中...不是psql的\copy)來填充一些CSV數據的臨時表。 一切都通過本地 ...但特拉維斯-CI運行我打:

"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', 
... 

所以文件Permission denied是事情。我的noob Linux技能告訴我該文件在該位置存在。我已經嘗試chmod到777,但沒有任何效果。

我連接到的Postgres上特拉維斯以字符串:

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

以及與該井。 有一件事,我確實需要的PostgreSQL V9.6,所以我.travis.yml文件看起來像:

language: node_js 

node_js: 
    - "6" 

services: 
    - postgresql 

addons: 
    postgresql: "9.6" 

sudo: false 
dist: trusty 

......這在過去一直偉大的工作,但是這是我第一次過使用copy

我想這與Postgres以某種方式運行的任何用戶有關?

任何幫助非常感激地收到!

回答

0

我居然遇到了這個問題,當時我正致力於在其上使用舊特拉維斯基礎設施繼承的代碼庫(基於Ubuntu準確),並希望將其更新爲可信賴的。

基於Precise的映像從travis主目錄中讀取文件沒有問題 - 也許PostgreSQL服務器運行的是travis用戶,而不是postgres,但在Trusty上並不是這樣,我得到了這個錯誤。

使用chmod對文件本身是不夠的,服務器仍然無法從travis主目錄讀取。因此,您可以使用mktemp創建文件,將文件複製到該文件,然後使用chmod將這些權限更改爲666。現在你可以使用PostgreSQL COPY FROM來閱讀它。

+0

謝謝@MichielB,工作的魅力! –