【问题标题】:flask web server not starting in travis-ci in dual python environments在双 python 环境中,flask web 服务器没有在 travis-ci 中启动
【发布时间】:2017-03-27 14:16:23
【问题描述】:

我想将我的项目集成到 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 的情况下尝试了它并得到了相同的结果。这一次,python 3.4 领先于 2.7 构建,3.4 构建成功启动了 Web 服务器并运行了测试。 2.7 版本无法启动 Web 服务器,并以某种方式被其他版本阻止。

【问题讨论】:

    标签: python flask continuous-integration travis-ci


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-10
      • 1970-01-01
      • 1970-01-01
      • 2012-05-30
      相关资源
      最近更新 更多