Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python sqlite3.2错误:在docker容器中运行dDango测试覆盖率时无法打开数据库文件_Python_Django_Docker_Docker Compose_Code Coverage - Fatal编程技术网

Python sqlite3.2错误:在docker容器中运行dDango测试覆盖率时无法打开数据库文件

Python sqlite3.2错误:在docker容器中运行dDango测试覆盖率时无法打开数据库文件,python,django,docker,docker-compose,code-coverage,Python,Django,Docker,Docker Compose,Code Coverage,您好,我已经看到许多这个标题的问题,但我无法解决我的问题与任何答案 我正在docker容器中设置Django项目,但我还想在docker容器中运行测试覆盖率,因为我的应用程序使用的是PostgreSQL数据库,该数据库也在docker中配置 基本上,当我在本地运行命令docker compose run web sh-c“coverage run manage.py test&&coverage report”时,它可以正常工作,但相同的命令不适用于Travis ci``` 这是我在Travis

您好,我已经看到许多这个标题的问题,但我无法解决我的问题与任何答案

我正在docker容器中设置Django项目,但我还想在docker容器中运行测试覆盖率,因为我的应用程序使用的是PostgreSQL数据库,该数据库也在docker中配置

基本上,当我在本地运行命令
docker compose run web sh-c“coverage run manage.py test&&coverage report”时,它可以正常工作,但相同的命令不适用于
Travis ci```

这是我在Travis上运行相同命令时得到的错误

Traceback (most recent call last):
  File "/usr/local/bin/coverage", line 8, in <module>
    sys.exit(main())
  File "/usr/local/lib/python3.8/site-packages/coverage/cmdline.py", line 827, in main
    status = CoverageScript().command_line(argv)
  File "/usr/local/lib/python3.8/site-packages/coverage/cmdline.py", line 555, in command_line
    return self.do_run(options, args)
  File "/usr/local/lib/python3.8/site-packages/coverage/cmdline.py", line 710, in do_run
    self.coverage.save()
  File "/usr/local/lib/python3.8/site-packages/coverage/control.py", line 649, in save
    data = self.get_data()
  File "/usr/local/lib/python3.8/site-packages/coverage/control.py", line 703, in get_data
    if self._collector and self._collector.flush_data():
  File "/usr/local/lib/python3.8/site-packages/coverage/collector.py", line 425, in flush_data
    self.covdata.add_lines(self.mapped_file_dict(self.data))
  File "/usr/local/lib/python3.8/site-packages/coverage/sqldata.py", line 437, in add_lines
    self._choose_lines_or_arcs(lines=True)
  File "/usr/local/lib/python3.8/site-packages/coverage/sqldata.py", line 494, in _choose_lines_or_arcs
    with self._connect() as con:
  File "/usr/local/lib/python3.8/site-packages/coverage/sqldata.py", line 299, in _connect
    self._create_db()
  File "/usr/local/lib/python3.8/site-packages/coverage/sqldata.py", line 248, in _create_db
    with db:
  File "/usr/local/lib/python3.8/site-packages/coverage/sqldata.py", line 1026, in __enter__
    self._connect()
  File "/usr/local/lib/python3.8/site-packages/coverage/sqldata.py", line 1008, in _connect
    self.con = sqlite3.connect(filename, check_same_thread=False)
sqlite3.OperationalError: unable to open database file
The command "docker-compose run web sh -c "coverage run manage.py test && coverage report"" exited with 1.

DOCKER文件

FROM python:3.8-alpine
LABEL Mwibutsa Floribert 

ENV PYTHONUNBUFFERED 1
RUN apk update && apk add gcc libc-dev make git libffi-dev openssl-dev python3-dev libxml2-dev libxslt-dev
COPY ./requirements.txt /requirements.txt

RUN \
    apk add --no-cache python3 postgresql-libs && \
    apk add --no-cache --virtual .build-deps gcc python3-dev musl-dev postgresql-dev && \
    python3 -m pip install -r requirements.txt --no-cache-dir && \
    apk --purge del .build-deps



RUN mkdir /app
WORKDIR /app
COPY . .

RUN adduser -D mwibutsa
RUN chown mwibutsa -R /app/

USER mwibutsa

数据库配置


DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'HOST': os.environ.get('DB_HOST'),
        'NAME': os.environ.get('DB_NAME'),
        'USER': os.environ.get('DB_USER'),
        'PASSWORD': os.environ.get('DB_PASSWORD')
    }
}

注意:我是从docker获取这些环境变量的

这也可能是由您在
settings.py
中的配置引起的

请确保您使用的是绝对路径,而不是相对路径,例如
~/
。绝对路径应该是完整路径,例如

'ENGINE': 'django.db.backends.sqlite3', 
'NAME': '/home/path/to/your/db/data.sqlite3'

这也可能是由于从您的
DockerFile
运行chown mwibutsa-R~/这一行引起的。考虑将此更改为绝对路径。

这也可能是由于您在设置中的配置。P< <代码> < /P> 请确保您使用的是绝对路径,而不是相对路径,例如

~/
。绝对路径应该是完整路径,例如

'ENGINE': 'django.db.backends.sqlite3', 
'NAME': '/home/path/to/your/db/data.sqlite3'

这也可能是由于从您的
DockerFile
运行chown mwibutsa-R~/这一行引起的。考虑将此更改为绝对路径。

有类似的问题,但CiVIEW没有在本地工作:问题是通过向项目文件夹扩展权限来解决的。

< P>有类似的问题,但是civerage在本地不起作用:通过将权限扩展到project文件夹解决了这个问题。

我实际上在使用PostgreSQL,我不知道为什么coverage会使用SQLite3,因为您在docker容器中运行PostgreSQL,所以您不必在服务中指定它。只有在测试外部PostgreSQL数据库时才需要,请参见。尝试从服务中删除PostgreSQL,看看这是否有任何影响?这将在类似的构建设置中进行介绍。你可以试着用它来识别你自己的错误。还没有,我还在努力寻找一种方法来手动操作,以防它继续出现错误。我实际上在使用PostgreSQL。我不知道为什么coverage会使用SQLite3。既然你在docker contains中运行PostgreSQL,你就不必在你的服务中指定它。只有在测试外部PostgreSQL数据库时才需要,请参见。尝试从服务中删除PostgreSQL,看看这是否有任何影响?这将在类似的构建设置中进行介绍。你可以试着用它来识别你自己的错误。还没有,我还在努力寻找一种方法来手动操作,以防它继续出现问题。你能解决这个问题吗?我在
CircleCI
``snowflake\u connection=sqlite3.connect(“snowflake.db”)sqlite3.OperationalError:无法打开数据库文件`。“`pyhton3.8-alpine``没有在docker映像中安装git,我必须在正在创建的映像中安装它。您好@Mwibutsa Floribert,我尝试将git添加到映像中(我也在使用
python:3.8-alpine
),测试仍然失败,无法打开数据库文件。我认为错误可能与数据库的相对文件路径有关。您是否能够解决此问题?我在
CircleCI
``snowflake\u connection=sqlite3.connect(“snowflake.db”)sqlite3.OperationalError:无法打开数据库文件`。“`pyhton3.8-alpine``没有在docker映像中安装git,我必须在正在创建的映像中安装它。您好@Mwibutsa Floribert,我尝试将git添加到映像中(我也在使用
python:3.8-alpine
),测试仍然失败,无法打开数据库文件。我认为这个错误可能与数据库的相对文件路径有关。