Nginx & Ubuntu Server 18.04 上的 Dryscrape "Can Not Find XVFB" 错误



我需要关于Drycrave和XVFB的帮助。我在我的Flask应用程序上使用Drycrave从javascript页面进行web抓取。如果我用python3 main.py和应用程序配置app.run(host="0.0.0.0")来提供它,那么在5000端口上一切都很好。但我必须使用Nginx和uWSGI在域上为我的应用程序提供服务。所以,当我使用Nginx为应用程序提供服务时,我收到了这个错误。

Sep 30 19:39:16 /address uwsgi[959]:   File "./scrape_manager.py", line 10, in get_details
Sep 30 19:39:16 /address uwsgi[959]:     dryscrape.start_xvfb()
Sep 30 19:39:16 /address uwsgi[959]:   File "/home/user/app/venv/lib/python3.6/site-packages/dryscrape/xvfb.py", line 8, in start_xvfb
Sep 30 19:39:16 /address uwsgi[959]:     xvfb = Xvfb()
Sep 30 19:39:16 /address uwsgi[959]:   File "/home/user/app/venv/lib/python3.6/site-packages/xvfbwrapper.py", line 41, in __init__
Sep 30 19:39:16 /address uwsgi[959]:     raise EnvironmentError(msg)

我该怎么办才能解决这个问题?

我找到了解决方案。

问题出现在Nginx的服务文件中。

应用程序服务

[Unit]
Description=uWSGI instance to serve app
After=network.target
[Service]
User=user
Group=www-data
WorkingDirectory=/home/user/app/app
Environment="PATH=/home/user/app/venv/bin"
ExecStart=/home/user/app/venv/bin/uwsgi --ini /home/user/app/app/app.ini
[Install]
WantedBy=multi-user.target

事实上,失败的来源是环境路径,它只是一个,而且是应用程序的虚拟环境。但是Drycrage需要从/bin或/usr/bin访问XVFB(检查一下,它在哪里存在(。通过这种方式,我不得不用两者来扩展环境路径,并添加了/usr/bin/bin

[Unit]
Description=uWSGI instance to serve app
After=network.target
[Service]
User=user
Group=www-data
WorkingDirectory=/home/user/app/app
Environment="PATH=/home/user/app/venv/bin:/usr/bin:/bin"
ExecStart=/home/user/app/venv/bin/uwsgi --ini /home/user/app/app/app.ini
[Install]
WantedBy=multi-user.target

这是正确的服务文件,但其中一个(/bin/usr/bin(可能是不必要的,因此您必须检查XVFB文件执行的路径。如果不确定,也可以添加/usr/bin和/bin;它会起作用,但如果你能找到路径,只需在下面添加一个这样的路径。

Environment="PATH=/home/user/app/venv/bin:/usr/bin"

此外,这种状态可能与您的用户组/用户权限有关,也很棘手。

相关内容

最新更新