【问题标题】:Dockerized Django tests only look at first $PATH locationDockerized Django 测试只查看第一个 $PATH 位置
【发布时间】:2020-09-22 04:17:59
【问题描述】:

我在 Docker 容器中运行 Django 测试套件,其中一些测试使用了我必须使用的程序 apt-get install (wkhtmltopdf)。现在我可以看到它已正确安装:

$ wkhtmltopdf --version
wkhtmltopdf 0.12.5

但由于某种原因,Django 测试无法使用它。安装位置肯定在我的$PATH(倒数第三个元素):

$ echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
$ find / -name wkhtmltopdf
/usr/bin/wkhtmltopdf

但是,当我运行测试时,我会得到一个以以下结尾的堆栈跟踪:

OSError: No wkhtmltopdf executable found: "/usr/local/bin/wkhtmltopdf"
If this file exists please check that this process can read it. Otherwise please install wkhtmltopdf - https://github.com/JazzCore/python-pdfkit/wiki/Installing-wkhtmltopdf

现在没有/usr/local/bin/wkhtmltopdf 是绝对正确的,因为它安装在其他地方(/usr/bin/),但是这两个位置都在$PATH

我尝试将 /usr/bin/ 移动到 $PATH 的开头,但随后出现错误:

Traceback (most recent call last):
  File "./manage.py", line 8, in <module>
    from django.core.management import execute_from_command_line
ImportError: No module named django.core.management

大概是因为它现在在/usr/bin/ 中寻找django,而实际上它在usr/local/bin/ 中,这不再是$PATH 上的第一个位置。

我不确定问题是 Docker 问题、Django 问题、测试问题,还是只是我误解了这里发生的一件或多件事情。

【问题讨论】:

  • 向我们展示一个完整的工作流程,它可以重现问题,包括所有 docker 命令和 Dockerfile!
  • 你的 Dockerfile 中有 apt-get install wkhtmltopdf 吗?

标签: python django linux docker django-tests


【解决方案1】:

原来项目使用pdfkit作为wkhtmltopdf的包装器,其中包括直接设置wkhtmltopdf路径:

config = pdfkit.configuration(wkhtmltopdf=settings.WKHTMLTOPDF_BIN)

在快速查看 Django 设置文件后设置为:

WKHTMLTOPDF_BIN = '/usr/local/bin/wkhtmltopdf'

谜团解开了!在这种情况下,解决方法是简单地将其设置为所需的实际路径 (/usr/bin/wkhtmltopdf)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-30
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    • 2011-08-04
    • 2017-10-19
    • 2019-09-29
    相关资源
    最近更新 更多