【问题标题】:Running gntp only on certain development VMs仅在某些开发虚拟机上运行 gntp
【发布时间】:2013-05-08 11:22:45
【问题描述】:

我正在一个类似于 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?

【问题讨论】:

    标签: ruby-on-rails guard growl


    【解决方案1】:

    根据 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-mac,然后执行 sudo /etc/init.d/hostname restart。这是用于在 Linux 系统上更改主机名的 reference

    【讨论】:

      【解决方案2】:

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

      比如说,macdevwindev 分别在您的计算机和 Windows 机器上,而在您的 Gemfile 中,您只能在 group :macdev {..} 部分添加 gntp 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"    
      

      【讨论】:

      • 通过修改我的示例中的 Guardfile 中的 if 并添加一个 else 分支来解决它。密钥是notification :off。我不确定我是否完全理解您的第一个选择。我怎么知道我在使用“macdev”?
      • 对不起,那是模棱两可的。使用 Rails 时可以设置自定义环境。我在问题中看到了标签,因此继续进行,从未费心澄清。稍后将添加指向文章的链接。 :)
      猜你喜欢
      • 1970-01-01
      • 2015-03-20
      • 1970-01-01
      • 1970-01-01
      • 2018-01-01
      • 2020-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多