2012-05-06 41 views
0

下面的命令在IRB中工作,但不能在Ruby程序內工作。爲什麼我的命令在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 
+1

是否ruby腳本作爲同一用戶運行?確保你把'/ usr/bin/env DISPLAY =:5 nohup ...'作爲你的命令,以正確處理環境變量。 – d11wtq

+0

感謝您的回覆@ d11wtq。當我以 – Dru

+1

以上的代碼作爲前綴時,我收到了權限被拒絕的消息。因此,當您在IRB中運行代碼時,它與ruby腳本運行時的用戶相同? – d11wtq

回答

3

這個問題似乎是在爲了連接到X會話,用戶必須有權這樣做(可能通過Xauthority)。 Web服務器運行的www數據用戶沒有此權限。

如果您試圖在Web請求的上下文中使用X環境執行某些操作(尤其是啓動Web瀏覽器,因爲看起來您正在執行此操作),那麼您應該重新考慮您的方法,因爲這聽起來很有趣像一個壞主意。

由於我們的工作性質,我們(在Flippa.com)出於各種原因必須打開網頁。我們使用phantomjs,這也需要一個X服務器,雖然我們通過Headless gem運行一個名爲Xvfb的無頭X服務器。但是,我們不會在網絡請求的情況下執行此類操作,因爲這通常是一個昂貴的過程。我們在後臺運行一堆Resque工作,並卸載要異步執行的工作。也許你應該考慮這樣的方法。另外,如果您啓動Firefox以便抓取網頁內容,抓取屏幕截圖等,您可能需要查看phantomjs,該程序旨在以編程方式使用,而不是在桌面上使用。

下面是我們使用phantomjs截取的當前屏幕截圖的一個示例。

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

+0

再次感謝。PhantomJS是我第一次拍攝快照,問題在於它沒有渲染閃光燈元素,這個問題沒有很好的記錄。這些是一些很棒的想法,我會試一試。 – Dru

+0

請注意,轉到PhantomJS 1.5,它在Linux上是純粹的無頭版。不再需要X或Xvfb。 –

+0

@AriyaHidayat,哇,真的嗎?這是個好消息:)我們會嘗試一下。 – d11wtq

相關問題