1

我正在一个类似于 Vagrant 的虚拟机设置上进行 Rails 开发。我最喜欢它的地方在于它是可移植的,所以我在家里和工作中基本上都拥有相同的基于 Ubuntu 的虚拟机——我在给定的时刻复制了它。

我的问题是我在家中的 Mac 上设置了警卫来通知 Growl,但是由于我在 Windows 上工作,我想禁用 Windows 主机上运行的 VM 上的通知功能。

这是我的Guardfile.

notification :gntp, :host => '192.168.1.139'

关于如何在其中一个虚拟机上禁用此功能的任何想法?

在我看来,两个虚拟机的不同之处在于 IP 地址,但我想我也可以修改主机名。

更新

我通过将上面的行修改为:

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 地址,而是尝试 localhost(这是默认行为)。在每次规范运行结束时我仍然会收到一个错误,但至少它不会在宝贵的几秒钟内挂起。错误是:

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

问题变成了如何在 Windows 上运行的 VM 上完全禁用 gntp?

4

2 回答 2

1

在第二种情况下出现错误的原因是,Guard通过检查盒子上已安装的通知程序自动选择可用的通知程序。因此,获得所需功能的一种方法是创建两个独立的环境。

说,macdevwindev分别在您的计算机和 Windows 机器上,在您的 中Gemfile,您将gntp仅在group :macdev {..}部分中添加 gem。有关在 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

这应该解决它。

或者,为每个 VM 创建一个环境变量:

# 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"    
于 2013-05-14T11:03:51.870 回答
0

根据 Kashyap 的回答,其中一种选择是必须遵循 Guardfile:

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

然后更改在我的 Mac 上运行的 Ubuntu VM 上的主机名,编辑/etc/hostname并将主机名设置为railsbox-macthen do sudo /etc/init.d/hostname restart. 这是在 Linux 系统上更改主机名的参考

于 2013-05-14T11:26:13.323 回答