35

我正在使用 vagrant box 作为一个项目的开发机器,这个项目有一个奇怪的依赖项,我似乎只能安装在 ubuntu 上。

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

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

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

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

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

4

3 回答 3

59

据此您可以通过VM的默认网关到达主机。

在来宾上运行netstat -rn应该会为您提供相关信息,在我的机器上将您上面的代码更改为以下看起来会为您提供帮助:

# database.yml
development:
  host: <%= `netstat -rn | grep "^0.0.0.0 " | cut -d " " -f10` %>
于 2013-11-12T21:48:45.913 回答
57

不确定它是否适用于所有人,尽管我所有的虚拟机都通过这个“神奇”的 ip 看到主机:

10.0.2.2

不知道它是否总是静态的,尽管对我来说可以工作而且非常方便-我可以在家中,从办公室使用笔记本电脑-通过路由器为我分配了不同的 IP,但我的虚拟机知道他们主人的“可信赖的名字”

于 2016-07-22T10:30:13.127 回答
6

作为 Matt 解决方案的替代方案,您还可以在Vagrantfile中使用专用网络

如果您添加一行,例如:

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

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

这样你就可以让database.yml简单地指向192.168.42.1所有时间(在这个例子中)。

于 2016-03-03T07:58:05.727 回答