Подтвердить что ты не робот

Скажите Vagrant ip главной машины

Я использую бродячий ящик как машину разработки для проекта с нечетной зависимостью, которую я могу только установить на ubuntu.

Я создал свою базу данных и получил свой код приложения на своем главном компьютере, и я делюсь ими с бродячим экземпляром через общий доступ к файлам NFS и настройкам postgres.

Моя проблема в том, что при перемещении моего компьютера с работы на дом ip для моего компьютера изменяется, а мой database.yml становится недействительным. Чтобы мой сервер и консоль работали, мне нужно обновить файл yaml новым IP-адресом хоста каждый раз, когда я присоединяюсь к новой сети.

Так как приложение rails работает на бродяжнике (хотя файлы находятся на моей главной машине), любая попытка для grep ip out ifconfig завершится неудачно, потому что он смотрит на виртуальную машину, а не на ящик хоста. Так что что-то вроде этого не работает:

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

Есть ли конфиг в файле Vagrant для передачи этой информации или способ создания переменной ENV хоста ip, которую может прочитать экземпляр ubuntu?

4b9b3361

Ответ 1

В соответствии с этим вы можете связаться с хостом через шлюз по умолчанию VM.

Запуск netstat -rn у гостя должен предоставить вам соответствующую информацию, на моей машине, изменившей ваш код выше на следующее, похоже, что все будет для вас:

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

Ответ 2

Не уверен, если он будет работать для всех, хотя все мои виртуальные машинные машины видят хост-машину с помощью этого "волшебного" ip:

10.0.2.2

Не знаю, всегда ли он статичен, хотя для меня это работает, и это очень удобно - я могу использовать ноутбук дома, из офиса - назначая мне разные IP-адреса маршрутизаторами, но мои виртуальные машины знают "надежное имя" их хозяин 🐶

Ответ 3

В качестве альтернативы решению Matt вы также можете использовать частные сети свой Vagrantfile.

Если вы добавите строку, например:

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

Vagrant добавит второй адаптер к виртуальной машине и подключит его к адаптеру только для хоста в этой подсети.

Таким образом, вы можете позволить database.yml просто указывать на 192.168.42.1 все время (в этом примере).