flask python web服务器无法在双python环境中的travis-ci中启动

时间:2017-03-27 14:16:23

标签: python flask continuous-integration travis-ci

我想将我的项目整合到Travis-CI中。我的项目涉及一个带有postgresql数据库的Python中的Flask Web服务器。我的所有测试都使用在调试模式下运行的Web服务器。我正试图在Travis-CI上正确设置这个并且遇到一些麻烦。

我正在python 2.7和3.4下构建和测试,问题是我的Web服务器似乎没有在3.4版本中启动。 2.7的构建首先启动,运行正常,我的所有测试都通过,但是Web服务器无法在3.4版本中启动。当我单独运行每个构建时,2.7和3.4版本都可以正常运行并且所有测试都通过。每个构建的Web服务器之间是否存在冲突?这是我的travis.yml文件。

language: python

sudo: false

python:
- '2.7'
- '3.4'

os:
- linux

services:
- postgresql
- memcached

addons:
  postgresql: '9.4'
  apt:
    packages:
      xvfb
      nano

branches:
- master

before_install:
- wget http://repo.continuum.io/miniconda/Miniconda-latest-Linux-x86_64.sh -O ~/miniconda.sh
- bash ~/miniconda.sh -b -p $HOME/miniconda
- export PATH="$HOME/miniconda/bin:$PATH"
- conda update --yes conda

install:
- conda create --yes -n test_env python=$TRAVIS_PYTHON_VERSION pip numpy scipy matplotlib ipython --quiet
- source activate test_env
- pip install -r requirements.txt --quiet
- pip install psycopg2 --quiet
- pip install blinker --quiet
- pip install nose --quiet
- pip install coverage --quiet
- pip install pytest --quiet
- pip install pytest-cov --quiet
- pip install pytest-sugar --quiet
- python setup.py install

before_script:
- export MANGA_LOCALHOST=1
- export PYTHONPATH=$PYTHONPATH:$TRAVIS_BUILD_DIR/python
- export DISPLAY=:99.0
- sh -e /etc/init.d/xvfb start
- sleep 3
- sh $TRAVIS_BUILD_DIR/bin/setup_travis
# make a local port based on python version, e.g. 5027 or 5034
- export LOCAL_MARVIN_PORT=50${TRAVIS_PYTHON_VERSION/.}
# start the local web server on port 50XX
- $TRAVIS_BUILD_DIR/bin/run_marvin -l -d -p $LOCAL_MARVIN_PORT > /dev/null &
- sleep 10
# list the processes running
- lsof -Pnl +M -i4
# test the web server is running
- curl http://localhost:$LOCAL_MARVIN_PORT/marvin2/api/general/getroutemap/

script:
- py.test python/marvin/tests -v --cov python/marvin --cov-report html

after_success:
- coveralls

最初本地Web服务器在端口5000上运行,我认为这样可以,因为每个python构建应该是独立的。它没有工作,并认为它可能与端口有关,所以我让每个Web服务器在一个独特的端口上运行,但这并没有解决问题。我打印各种东西作为支票

2.7版本说Web服务器在5027上运行,我的curl产生输出。

$ lsof -Pnl +M -i4
COMMAND  PID     USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
Xvfb    3516     1000    1u  IPv4 67036287      0t0  TCP *:6099 (LISTEN)
python  3698     1000    5u  IPv4 67163206      0t0  TCP 127.0.0.1:5027 (LISTEN)
python  3698     1000    7u  IPv4 67154596      0t0  TCP 172.17.0.5:55988->155.101.19.34:443 (ESTABLISHED)
python  3698     1000    8u  IPv4 67162470      0t0  TCP 172.17.0.5:55964->155.101.19.34:80 (ESTABLISHED)
python  3713     1000    5u  IPv4 67163206      0t0  TCP 127.0.0.1:5027 (LISTEN)
python  3713     1000    7u  IPv4 67154596      0t0  TCP 172.17.0.5:55988->155.101.19.34:443 (ESTABLISHED)
python  3713     1000    8u  IPv4 67162470      0t0  TCP 172.17.0.5:55964->155.101.19.34:80 (ESTABLISHED)

$ curl http://localhost:$LOCAL_MARVIN_PORT/marvin2/api/general/getroutemap/
--------------------------------------------------------------------------------
INFO in __init__ [/home/travis/build/sdss/marvin/python/marvin/web/__init__.py:146]:
Loading config file: /home/travis/build/sdss/marvin/python/marvin/web/configuration/localhost.cfg
--------------------------------------------------------------------------------
WARNING:root: * CAUTION: flask-profiler is working without basic auth!
WARNING:werkzeug: * Debugger is active!
{
  "data": null, 
  "error": null, 
  "inconfig": {}, 
  "status": 1, 
  "traceback": null, 
  ...
}

继续进行并运行所有测试。但是,我的3.4版本似乎无法在端口5034上启动Web服务器而没有任何指示原因。这些端口确实设置不同。

$ lsof -Pnl +M -i4
COMMAND  PID     USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
Xvfb    3532     1000    1u  IPv4 34279725      0t0  TCP *:6099 (LISTEN)

$ curl http://localhost:$LOCAL_MARVIN_PORT/marvin2/api/general/getroutemap/
curl: (7) couldn't connect to host
The command "curl http://localhost:$LOCAL_MARVIN_PORT/marvin2/api/general/getroutemap/" failed and exited with 7 during .

同样,当我单独运行每个构建时,2.7和3.4都成功构建,运行所有测试并通过。它是否与我如何将标准从Web服务器转储到/ dev / null有关?我应该做些不同的事吗?每个构建是不是完全独立的?

更新:我刚刚尝试了没有/ dev / null并获得了相同的reesult。此时,python 3.4领先于2.7版本,3.4版本成功启动了Web服务器并运行了测试。 2.7版本无法启动Web服务器,并以某种方式被其他版本阻止。

1 个答案:

答案 0 :(得分:0)

我通过将睡眠时间从10增加到20来解决这个问题。显然,10秒的时间太短,无法让Web服务器启动。