我使用 travis-ci.org 来测试Node.js模块。 它使用最新的pg包来访问PostgreSQL数据库。
集成测试需要使用Postgres copy
命令(来自事务内...而不是psql' s \copy
)来填充一些带有 CSV的临时表数据。
一切都在本地传递 ......但在Travis-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:postgres@localhost: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 :(得分:0)
当我正在使用旧的Travis基础架构(基于Ubuntu Precise)并希望将其更新为Trusty的继承代码库时,我遇到了这个问题。
基于精确的图像从travis主目录读取文件没有问题 - 可能PostgreSQL服务器作为travis
用户运行,而不是postgres
,但在Trusty上这不是我得到了这个错误。
在文件本身上使用chmod
是不够的,服务器仍然无法从travis
主目录中读取。因此,您可以使用mktemp
创建文件,将文件复制到该文件,使用666
将这些权限更改为chmod
。现在,您可以使用PostgreSQL COPY FROM
来阅读它。