在Heroku上是否有可能运行xvfb?

8
我想在Heroku上运行xvfb。在我的Mac上,我使用dmg文件安装它。有人知道如何在Heroku上操作吗?
我发现了这些构建包(http://github.com/douglasjsellers/heroku-xvfb-buildpack),但是按照说明似乎无法解决问题,因为xvfb仍未正确安装。此外,我尝试安装xvfbwrapper(https://pypi.python.org/pypi/xvfbwrapper/0.1.0),但在Heroku上仍无法正常工作(对于可能是新手的问题表示歉意)。
以下是我从Heroku日志中获取的错误:
2015-02-24T02:09:16.035298+00:00 app[web.6]: cmd=['Xvfb', '-help']
2015-02-24T02:09:16.035564+00:00 app[web.6]: Program install error! 
2015-02-24T02:09:16.035302+00:00 app[web.6]: OSError=[Errno 2] No such file or directory

这里是代码:

temp = tempfile.mkstemp(suffix='.html')
html = os.fdopen(temp[0], "r+")
html.write(cv)
html.seek(0, 0)

display = Display(visible=0, size=(800, 600))
display.start()

# Open the file on Selenium to load the JavaScript
driver = webdriver.Firefox()
driver.get("file://" + temp[1])

我也卡住了。昨天在亚马逊上很容易就搞定了,但在Heroku上就是不动。 - freeall
3个回答

7

我在研究如何为Cedar-14更新Xvfb时发现了这个问题,并成功地让#2起作用。以下是步骤:

  1. 我使用buildpack-apt安装了x11-xkb-utils xvfb x11-xkb-utils xfonts-100dpi xfonts-75dpi xfonts-scalable xfonts-cyrillic libxfont1 xvfb

  2. 在运行apt buildpack之后,您需要稍微修改一下Xvfb以使一切顺利运行。为此,我使用了自己的run-bash buildpack,但任何允许您在Heroku编译期间运行bash脚本的东西都可以。以下是我用于修补Xvfb并索引字体的脚本:https://gist.github.com/fxtentacle/960cdb96ece01add8686

  3. 现在,您可以使用heroku run bash来检查XAUTHORITY=/tmp/xvfb-run.2NG0xl/Xauthority Xvfb ":99" -screen 0 1280x1024x24 -nolisten tcp是否正常工作。


4
是的,这是可能的,但很复杂。我遵循了fxtentacle所做的一些事情(在他们的答案中),但这可能更简单。这些说明提供了一个最小的Xvfb设置; 它仍然会打印出一堆警告。
使用heroku-buildpack-apt安装xvfblibnotify4 debian软件包。然后使用此buildpack修复/usr/bin/xkbcomp问题: https://github.com/captain401/heroku-buildpack-xvfb 然后你可以使用xvfb-run $PROGRAM来运行你的应用程序。

使用上述指令后,我成功运行了xvfb-run。不幸的是,electron在执行时失败,报错信息为: error while loading shared libraries: libnotify.so.4: cannot open shared object file: No such file or directory。通过手动运行bash命令没有出现任何错误。libnotify4已安装,并位于/app/.apt目录下。我想知道为什么node进程没有捕获到LD_LIBRARY_PATH环境变量。 - neofreko
啊,这在上个月有所改变 - 你通过 heroku-buildpack-apt 的 Aptfile 安装了 libnotify4 吗?我也不得不添加它(除了 xvfb)。您可以运行 heroku run bash 来获取 shell 并检查您的 LD_LIBRARY_PATH - yoz
是的,我通过Aptfile安装了它。在bash中使用xvfb-run调用electron没有任何问题。然而,通过nodejs进程执行它从来没有成功过:(。我甚至尝试从Heroku配置设置LD_LIBRARY_PATH,但没有运气——这又是libnotify4的问题。 - neofreko
Electron还有其他问题-这在最近的版本中得到了修复:https://bugs.chromium.org/p/chromium/issues/detail?id=522853 - yoz

2

我也在想同样的问题。你似乎已经找到了这个人的问题。所有提到的构建包都是1年以上的,不再起作用。

两个可行的选择:

  1. 编译一个自包含的xvfb二进制文件,例如https://github.com/kenshin23/xvfb-portable-binary,它可以在Heroku的当前操作系统和架构上运行,并在更新时重新构建。

  2. 从apt软件包管理器中安装所有依赖项到像~/.apt这样的地方,并从那里运行,就像最新的buildpack-apt一样。对我来说,这个选项死了,出现了sh: 1: /usr/bin/xkbcomp: not found的错误。Xvfb正在查找/,而apt将命令安装到~/.apt/usr/bin/xkbcomp。还没有找到如何告诉Xvfb查找~/.apt/的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接