2013-05-14 59 views
1

我正在虛擬機設置上進行Rails開發,這與Vagrant有點類似。我最喜歡的是它是可移植的,所以我在家裏和工作上都有基本相同的基於Ubuntu的虛擬機 - 我在給定時刻複製了它。僅在某些開發虛擬機上運行gntp

我的問題是,我已經設置了警衛在家裏的Mac上通知Growl,但是因爲我在Windows上工作,所以我想禁用在Windows主機上運行的VM上的通知功能。

以下是我的Guardfile中的問題。

notification :gntp, :host => '192.168.1.139' 

有關如何在其中一個虛擬機上禁用此功能的任何想法?

從我的頭頂來看,兩臺虛擬機的不同之處在於IP地址,但我想我也可以修改主機名。

UPDATE

我解決了一半這一點,通過修改上述行來:

notification :gntp, :host => '192.168.1.139' if Socket.gethostname == 'railsbox' 
# 'railsbox' is the VM on my Mac, I renamed the VM on Windows to 'railsbox-win' 

至少這樣它不會嘗試以通知的IP地址,但會嘗試本地主機(這是默認行爲)。在每次規範運行結束時,我仍然得到一個錯誤,但至少它不會掛上寶貴的秒數。錯誤是:

ERROR - Error sending notification with gntp: Connection refused - connect(2) 

問題變成如何完全禁用運行在Windows上的虛擬機上的gntp?

回答

1

在第二種情況下出現錯誤的原因是,Guard會通過檢查您的盒子上已安裝的通知器來自動選擇可用的通知器。因此,獲得所需功能的一種方法是創建兩個獨立的環境。

說,macdev分別windev您的計算機和Windows機器上,並在您的Gemfile,你只在group :macdev {..}部分添加gntp寶石。 Rails中更多關於創建自定義環境:http://railscasts.com/episodes/72-adding-an-environment

# Gemfile 

group :macdev do 
    gem 'ruby_gntp' 
end 

group :windev do 
    # a windows-specific notification gem, may be. 
end 

這應該修復它。

或者,創建一個環境變量對每個虛擬機:

# On Mac 
export VM = "mac" 
# and a similar command on windows. 

而在你Guardfile,

# Guardfile 

notification :off if ENV['VM'] == "win" 
notification :gntp, :host => '192.168.1.139' if ENV['VM'] == "mac"  
+0

通過在我的例子中修改Guardfile中的if並添加一個else分支來解決它。關鍵是「通知:關閉」。我不確定我完全理解你的第一個選擇。我怎麼知道我在說'macdev'? – janosrusiczki 2013-05-14 11:19:35

+0

對不起,這是含糊不清的。你可以在使用Rails的時候設置一個自定義的環境。我在問題中看到了標籤,因此繼續使用它,從不打算澄清。稍後會添加一篇文章鏈接。 :) – Kashyap 2013-05-14 11:36:05

+0

感謝您的迴應和更新。 – janosrusiczki 2013-05-14 13:54:50

0

按卡什亞普的答案,備選方案之一是必須在以下Guardfile:

if Socket.gethostname == 'railsbox-mac' 
    notification :gntp, :host => '192.168.1.139' 
else 
    notification :off # or some Windows specific notification 
end 

然後更改在m上運行的Ubuntu VM上的主機名y Mac編輯/etc/hostname並將主機名設置爲railsbox-mac,然後執行sudo /etc/init.d/hostname restart。這裏的reference用於更改Linux系統上的主機名。