2013-05-14 2 views
1

Я занимаюсь разработкой Rails на установке виртуальной машины, которая несколько похожа на Vagrant. Что мне больше всего нравится, так это то, что он переносимый, поэтому у меня в основном та же виртуальная машина на основе Ubuntu дома и на работе - я сделал копию ее в данный момент.Запуск gntp только на определенных виртуальных машинах разработки

Моя проблема в том, что я настроил охрану, чтобы уведомить Growl на моем Mac дома, однако, поскольку я нахожусь в Windows на работе, я хотел бы отключить функцию уведомления на виртуальной машине, запущенной на хосте Windows.

Вот моя линия в моем 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-адрес, но пытается Localhost (который поведение по умолчанию). Я до сих пор получаю сообщение об ошибке в конце каждого спецоперации, но, по крайней мере, он не будет висеть за драгоценные секунды. Ошибка:

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

Вопрос в том, как полностью отключить gntp на виртуальной машине в Windows?

ответ

1

Причина, по которой вы получаете ошибку во втором случае, заключается в том, что Guard автоматически выбирает доступный уведомитель, пройдя установленные установленные на вашем поле (ов). Таким образом, одним из способов получить необходимую функциональность является создание двух отдельных сред.

Say, macdev и windev на вашем компьютере, и машина окна соответственно, а в вашем Gemfile, вы бы добавить gntp камень только в group :macdev {..} части. Подробнее о создании пользовательских окружений в 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

Решил его, изменив if в Guardfile из моего примера и добавив ветку else. Ключ был «notification: off». Я не уверен, что полностью понял вашу первую альтернативу. Откуда я знаю, что я нахожусь, скажем, «macdev»? – janosrusiczki

+0

Извините, это было неоднозначно. При использовании Rails можно настроить пользовательскую среду. Я видел тег в вопросе и так продолжал с ним и никогда не потрудился уточнить. Будет добавить ссылку на статью через некоторое время. :) – Kashyap

+0

Спасибо за ответ и обновление. – janosrusiczki

0

В соответствии с ответом Kashyap, один из вариантов, чтобы иметь в следующее Защитный файл:

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

Затем, чтобы изменить имя хоста на виртуальной машине Ubuntu, работающей на m y Mac отредактируйте /etc/hostname и установите имя хоста railsbox-mac, затем выполните sudo /etc/init.d/hostname restart. Вот reference для изменения имени хоста в системах Linux.