我正在使用一个流浪盒作为一个具有奇怪依赖性的项目的开发机器,我似乎只能在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变量?
答案 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
(在此示例中)。