13

我正在尝试为 Travis CI 中的一些 PL/Python PostgreSQL 程序设置 CI。

我尝试了几种方法:
1)使用我试图假设的遗留基础设施已经安装了 PL/Python,但它没有成功:

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)一开始就尝试添加sudo apt-get update && sudo apt-get -y install postgresql-plpython-9.4命令。它也失败了,因为这个命令启动了对已经安装在 Travis 环境中的 PostgresSQL 9.4 的替换。

特拉维斯打造。

3)还尝试在配置中使用基于容器的基础设施:

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

也没有成功。

在 Travis CI 中测试 PL/Python 程序的好方法是什么?

4

3 回答 3

7

我能够使用以下.travis.yml构建 python-tempo

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();'

您的旧配置尝试存在各种问题,包括在安装 9.4 之前未停止现有的 PostgreSQL 9.1 实例以及未正确指定 plpython 语言。我相信某些命令也没有以正确的用户身份运行。上述配置解决了所有问题。可能有一些方法可以改进此配置,但是一旦我开始工作,我就停止了。

基于容器的配置将不起作用,因为postgresql-plpython-9.4当前不在预先批准的软件包的白名单中。但是,postgresql-plpython-9.5如果您想迁移到基于容器的配置,您可以尝试遵循包批准流程postgresql-plpython-9.4或等待 PostgreSQL 9.5 的GA版本然后尝试迁移。

于 2015-08-10T01:24:10.620 回答
4

既然已经确认,将我以前的评论转换为答案......

正如Travis docs中所述,安装它的正确方法是在 before_install 阶段更新您的依赖项(很像列表中的选项 2)。

唯一的问题似乎是您在升级之前没有停止 Postgres。

于 2015-08-10T21:00:40.800 回答
2

我不知道确切的细节,但是,如果你把文件放在正确的地方,你可以从程序本身调用它

import fileName.className

或者

import methodName from fileName.className

编辑:我查了一下,把它放在和你正在运行的程序(cmd、idle等)相同的目录中并调用它,或者把它放在一个文件夹中并将文件夹名称添加到代码中

例如。

import folder/fileName.ClassName
于 2015-07-30T08:05:12.720 回答