1

Vagrant にやや似た仮想マシンのセットアップで Rails 開発を行っています。私が最も気に入っているのは、ポータブルであるため、基本的に自宅と職場で同じ Ubuntu ベースの仮想マシンを使用していることです。特定の瞬間にそのコピーを作成しました。

私の問題は、自宅の Mac で Growl に通知するようにガードを設定したことですが、職場で Windows を使用しているため、Windows ホストで実行されている VM の通知機能を無効にしたいと考えています。

これが私の問題の行Guardfileです。

notification :gntp, :host => '192.168.1.139'

VM の 1 つでこれを無効にする方法についてのアイデアはありますか?

私の考えでは、2 つの VM で異なる点の 1 つは 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

2 番目のケースでエラーが発生する理由はGuard、ボックスにインストールされているものを調べて、利用可能な通知機能を自動的に選択するためです。そのため、必要な機能を得る 1 つの方法は、2 つの別個の環境を作成することです。

たとえば、コンピューターと Windows マシンでそれぞれ、および で、macdevその部分にのみ宝石を追加します。Rails でのカスタム環境の作成の詳細: http://railscasts.com/episodes/72-adding-an-environmentwindevGemfilegntpgroup :macdev {..}

# 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

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 の回答によると、代替手段の 1 つは、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 システムでホスト名を変更するためのリファレンスは次のとおりです。

于 2013-05-14T11:26:13.323 に答える