告诉Vagrant主机的ip

时间:2013-11-11 22:23:21

标签: ruby-on-rails ruby-on-rails-4 vagrant

我正在使用一个流浪盒作为一个具有奇怪依赖性的项目的开发机器,我似乎只能在ubuntu上安装。

我创建了我的数据库并在我的主机上安装了我的应用程序代码,并通过NFS文件共享和postgres配置与vagrant实例共享它们。

我的问题是,当我将计算机从工作转移到家中时,我的计算机的IP发生了变化,我的database.yml变得无效。为了使我的服务器和控制台正常工作,我需要在每次加入新网络时使用主机的新IP地址更新yaml文件。

由于rails应用程序在vagrant上运行(即使它的文件位于我的主机上),任何尝试从ifconfig中取出ip的尝试都将失败,因为它正在查看VM而不是主机框。所以这样的事情不起作用:

# database.yml
development:
  host: <%= `ifconfig en0 | grep "inet " | cut -d" " -f2` %>

Vagrant文​​件中是否有配置传递此信息,或者是否可以创建ubuntu实例可以读取的主机ip的ENV变量?

3 个答案:

答案 0 :(得分:51)

根据this,您可以通过VM的默认网关访问主机。

在访客上运行netstat -rn应该会在我的机器上为您提供相关信息,将上面的代码更改为以下内容,看起来会让您感觉良好:

# database.yml
development:
  host: <%= `netstat -rn | grep "^0.0.0.0 " | cut -d " " -f10` %>

答案 1 :(得分:34)

不确定,如果它适用于所有人,虽然我的所有虚拟盒机都通过这个“魔术”ip看到主机:

10.0.2.2

不知道它是否总是静止的,虽然对我而言非常方便 - 我可以在家里,办公室使用笔记本电脑 - 通过路由器为我分配不同的IP,但是我的VM知道“可信赖的名字”他们的主人

答案 2 :(得分:5)

作为Matt解决方案的替代方案,您还可以使用{{3>} Vagrantfile

如果您添加以下行:

config.vm.network "private_network", ip: "192.168.42.10"

Vagrant会向虚拟机添加第二个适配器,并将其连接到该子网上仅限主机的适配器。

这样您就可以让database.yml始终只指向192.168.42.1(在此示例中)。