守卫 - 与流浪汉一起生活

iha*_*dez 6 rspec ruby-on-rails guard vagrant

我试图使用保护的--listen-on选项与流浪汉所概述这里,但我无法得到它的工作.

如果我添加config.vm.network :forwarded_port, guest: 4000, host: 4000到我的Vagrantfile,然后尝试开始听listen -f 127.0.0.1:4000,我得到一个错误: Broadcaster.initialize: Address already in use - bind(2) for "127.0.0.1" port 4000.

如果我试着开始听,然后开始流浪汉,流浪汉同样抱怨:

Vagrant无法转发此VM上的指定端口,因为它们会与已在这些端口上侦听的其他应用程序发生冲突.转发到4000的端口已在主机上使用.

所以我尝试了一些其他的东西,同时省略了端口4000转发Vagrantfile:

如果我省略了我的端口4000转发Vagrantfile,那么我可以成功开始收听listen -f 127.0.0.1:4000.但是当我guard -o "10.0.2.2:4000" -w "/home/me/my_project/"在我的流浪客人中跑步时,当文件发生变化时,警卫不会做任何事情.添加-v标记到listen呼叫揭示了变化被拾起正确的主机上.

我也尝试listen -f 10.11.12.1:4000在主机上结合使用guard -o "10.11.12.1:4000" -w "/home/me/my_project/"相同的防守结果,当文件发生变化时不做任何事情.

结合listen -f 127.0.0.1:4000guard -o "10.11.12.1:4000" -w "/home/me/my_project/"结果在后卫暂时无法接通.

我也尝试使用ssh进行端口转发:

listen -vf 127.0.0.1:4000 # host
ssh -R 4000:localhost:4000 vagrant@10.11.12.13 # connect
guard -o "127.0.0.1:4000" -w "/home/me/my_project" # guest
Run Code Online (Sandbox Code Playgroud)

一切似乎都适合端口转发,但是当文件发生变化时,警卫再也不会做任何事情.

主机和客户都是ubuntu 14.04.

我的网络配置Vagrantfile如下:

config.vm.network 'forwarded_port', guest: 80,   host: 3000
config.vm.network 'private_network', ip: '10.11.12.13'
Run Code Online (Sandbox Code Playgroud)

使这项工作的正确方法是什么?

Cez*_*ski 5

更新2:

Listen 3.x不再包含TCP功能(请参阅https://github.com/guard/listen/issues/258),因此您需要锁定到2.x,例如在您的Gemfile:

gem 'listen', '~> 2.9'
Run Code Online (Sandbox Code Playgroud)

然后按照以下说明操作:

更新1:

要使guard> = v2.7.0正常工作,您需要listen> = v2.9.0和魔术-r选项(因为完整路径在主机和来宾上不匹配):

listen -r -f 10.11.12.1:4000 # on the host (note "-r" option)
guard -o 10.11.12.1:4000 # on the guest (paths relative, so no prob)
Run Code Online (Sandbox Code Playgroud)

笔记:

  • guardv2.7.0开始,-w仅用于监听多个目录.相反,在您正在观看的目录中运行监听

  • 我只考虑Vargrant/ssh转发只有你在防火墙后面,或者由于某种原因你不能使用给定的端口 - 而是使用VM分配的IP和网络(例如10.11.12.1)

  • 如需调试内容guard,请查看:https://github.com/guard/guard/wiki/Understanding-Guard(值得一看)

  • 在127.0.0.1上运行侦听TCP服务器没有多大意义(除非你必须使用复杂的ssh端口转发设置)