2017-06-16 30 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,工作的魅力! –