我想将我的项目整合到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服务器,并以某种方式被其他版本阻止。
答案 0 :(得分:0)
我通过将睡眠时间从10增加到20来解决这个问题。显然,10秒的时间太短,无法让Web服务器启动。