1

下面的命令在 IRB 中有效,但在 Ruby 程序中无效。

DISPLAY=:5 nohup firefox youtube.com &  

irb它成功返回:

nohup: redirecting stderr to stdout

当在反引号(“`”)中从 Ruby 程序调用时,它返回:

** (firefox:12402): WARNING **: Could not connect: Connection refused

** (firefox:12470): CRITICAL **: unable to create '/var/www/.cache/dconf'; dconf will not work properly.
Xlib:  extension "RANDR" missing on display ":5".
Failed to stat home directory /var/www: No such file or directory

(firefox:12470): GConf-WARNING **: Client failed to connect to the D-BUS daemon:
Failed to connect to socket /tmp/dbus-989cWYOeP6: Connection refused
4

1 回答 1

3

问题似乎是为了连接到 X 会话,用户必须有权这样做(可能通过 Xauthority)。运行 Web 服务器的 www-data 用户没有这样的权限。

如果您尝试在 Web 请求的上下文中使用 X 环境执行操作(尤其是启动 Web 浏览器,就像您正在做的那样),那么您可能应该重新考虑您的方法,因为这听起来是个坏主意.

由于我们工作的性质,我们(在Flippa.com 上)必须出于各种原因打开网页。我们使用phantomjs ,它也需要一个 X 服务器,尽管我们通过Headless gem运行一个名为Xvfb的无头 X 服务器。但是,我们不会在 Web 请求的上下文中执行此类操作,因为这通常是一个昂贵的过程。我们在后台运行了一堆 Resque 工作线程并卸载了异步执行的工作。也许你应该考虑这样的方法。

此外,如果您启动 Firefox 是为了抓取网页内容、截屏等,您可能需要查看 phantomjs,它旨在以编程方式使用,而不是在桌面上使用。

这是我们使用 phantomjs 截取的当前屏幕截图的示例。

https://flippa.com/auctions/2703649/screenshots/30b037b026044f58764888995d41c020.png

于 2012-05-06T09:35:30.310 回答