使用vagrant / puppet自动设置xdebug.remote_host ip地址

时间:2013-08-14 19:54:50

标签: php xdebug vagrant puppet

我正在使用puppet进行配置来设置Vagrant环境。

我遇到了一个问题,我希望xdebug在运行vagrant up时“正常工作”但是我需要在php.ini文件中xdebug.remote_host指定主机ip地址这在使用配置的每台机器上会有所不同,因此我希望在发出vagrant up时自动更新该值。

VagrantFile:

config.vm.network :forwarded_port, guest: 9000, host: 9000

.ini设置:

'xdebug.default_enable=1',
'xdebug.remote_enable=1',
'xdebug.remote_handler=dbgp',
'xdebug.remote_host=localhost:9000',
'xdebug.remote_port=9000',
'xdebug.remote_autostart=0',
'xdebug.max_nesting_level=250'

我也尝试过xdebug.remote_host=localhost

来自流浪汉机器的

ifconfig

vagrant@precise64 ~ : ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0c:29:cf:f9:89
      inet addr:192.168.61.142  Bcast:192.168.61.255  Mask:255.255.255.0

的phpinfo()

REMOTE_ADDR 192.168.61.2

REMOTE_PORT 51886

只是为了确认一下,如果我在我的osx主机上给出remote_host我的实际IP地址,它就能正常工作。

2 个答案:

答案 0 :(得分:9)

http://www.xdebug.org/docs/all_settings中所述,您可以设置选项

xdebug.remote_connect_back = 1

因此,xdebug将连接回请求网页的主机,并忽略选项“remote_host”。

此解决方案存在一个问题:如果为任何请求和用户启用xdebug,则打开Web页面没有运行xdebug客户端(等待来自服务器的连接),并且具有非关闭9000端口,服务器会等待很长时间(尝试连接到客户端的xdebug会话),然后才能最终加载页面。 我在Windows 7机器上遇到了这个问题,因为它的防火墙实际上并没有关闭端口,连接软件无法理解,没有人在监听端口。

如果这不起作用:

我有同样的情况,然后我需要VirtualBox VM配置,这应该适用于任何具有任何IP的机器。 所以,我这样做了:

  1. 我在VirtualBox中创建了虚拟网络接口(我不知道,在vagrant中是否有任何选项,但它应该是这样),并将其本地地址设置为192.168.100.1, 所以,我的REAL机器有两个地址:eth0:192.168.1.2vboxnet0:192.168.100.1
  2. 我为虚拟机配置了以下值:IP=192.168.100.100,默认网关= 192.168.100.1
  3. 将我的XDebug配置为remote_ip=192.168.100.1
  4. 现在,我有3台这台机器的副本(我的副本,我的同事使用了2份),它工作正常!

    因此,解决方案是将您的IP地址设置为某个“常数”,只是虚拟。

答案 1 :(得分:0)

对于运行GNU / Linux或使用docker映像的自定义游民机器,您可以通过以下命令找到ip:

netstat -rn | grep "^0.0.0.0 " | cut -d " " -f10

要获取IP,请先运行,然后调整以下命令:

vagrant ssh #login into the machine

如果您正在或想要在无业游民中运行docker时获得奖励信息

另一个有趣的情况是,您在一个无聊的GNU / Linux映像内产生的docker容器内运行php。在这种情况下,请勿尝试将正在运行的php映像的外壳剃光,并运行上面的命令,请通过运行以下命令找到 VM 连接回主机的ip:

netstat -rn | grep "^0.0.0.0 " | cut -d " " -f10

在运行的 VM 的外壳中,并在运行的Docker容器上使用 NOT (使用docker execdocker-compose exec)。如果是入口点脚本,请为XDEBUG ip设置一个环境变量,并在该值为空的情况下自动设置该值,然后自动设置ip。