BrowserSync + Gulp с Vagrant не обновляется

Я использую BrowserSync с Gulp для живой перезагрузки сайта на локальном компьютере при изменении определенных типов файлов. У меня есть следующий фрагмент в моем gulpfile:

gulp.task('browser-sync', function() {
    browsersync.init({
        proxy: "mySite:8080",
        files: ["./*.html", "dev/*.css"]
    });
});

При изменении (и сохранении) любого из вышеперечисленных файлов я получаю в своем терминале такой вывод:

[BS] Serving files from: ./
[BS] Watching files...
[BS] File changed: index.html
[BS] File changed: dev\styles.css

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


ОБНОВЛЕНИЕ

Я забыл упомянуть, что мой хост-компьютер работает под управлением Windows 10, а мой гостевой компьютер работает под управлением Ubuntu 14.04.4 LTS. Поставщик виртуальных машин — VirtualBox.

Первоначально я использовал метод config.vm.synced_folder по умолчанию. У меня на vagrantfile было такое:

config.vm.synced_folder "/Path/To/My/Host/Website/Folder/", "/usr/nginx/html/mywebsite/"

С тех пор я пытался использовать NFS со следующей конфигурацией:

config.vm.synced_folder "/Path/To/My/Host/Website/Folder/", "/usr/nginx/html/mywebsite/", 
:type => :nfs, 
:mount_options => ['nolock,vers=3,udp,noatime,actimeo=1']

Поскольку мой хост работает под управлением Windows, я установил плагин vagrant-winnfsd, который добавляет поддержку NFS. Но теперь vagrant останавливается, когда пытается смонтировать общую папку NFS.

Кроме того, поскольку на vagrant up я получал следующую ошибку: GuestAdditions versions on your host (5.0.16) and guest (4.3.36) do not match, я установил плагин vagrant-vbgues, чтобы поддерживать гостевые дополнения VirtualBox в актуальном состоянии. Тоже безрезультатно. Vagrant все еще зависает, когда пытается смонтировать общую папку NFS.


person nunop    schedule 18.03.2016    source источник
comment
Смотрите мой обновленный ответ о rsync. Плагин vagrant-vbguest для меня тоже удачный, но если вы подключитесь к машине по ssh, вы можете вручную установить гостевые дополнения, если считаете, что это проблема. С rsync для синхронизированных папок у меня не было проблем с несоответствием версий между 4.2 и 5.x, чего бы это ни стоило.   -  person Brian Brownton    schedule 19.03.2016
comment
Спасибо, рассмотрим это!   -  person nunop    schedule 19.03.2016


Ответы (2)


Название и теги говорят, что вы используете Vagrant, хотя это не упоминается в вашем вопросе.

Убедитесь, что ваши изменения синхронизируются с виртуальной машиной. Просмотрите документацию vagrant, чтобы выбрать тип синхронизируемых папок, будет работать для вашей ситуации. Их основной пример выглядит следующим образом:

Vagrant.configure("2") do |config|
  # other config here

  config.vm.synced_folder "src/", "/srv/website"
end

Вы можете vagrant ssh проверить файлы вручную, чтобы убедиться, что они совпадают, а синхронизированные папки работают должным образом.

ОБНОВЛЕНИЕ

Основываясь на новой информации и комментариях, я бы рекомендовал использовать rsync в качестве метода общей папки.

config.vm.synced_folder "Host/Path/", "/Guest/Path", type: "rsync",
    rsync__exclude: [ '.git', 'logs'],
    rsync__args: ["--verbose"],
    rsync__chown: false

Я так и не нашел способа заставить NFS хорошо работать (и хорошо работать), если в миксе есть Windows.

person Brian Brownton    schedule 18.03.2016
comment
Изначально я использовал аналогичную конфигурацию, но сейчас изучаю NFS. Попробую ваше предложение проверить файлы вручную, поскольку я не пробовал этого раньше. Спасибо за подсказку! - person nunop; 18.03.2016
comment
Вернулся к исходной конфигурации и проверил файлы по вашему совету, с vagrant ssh. Происходит самое странное: например, index.html отражает изменения, которые я делаю в своем редакторе. Может быть, синхронизация браузера просматривает правильный файл, но обновляет какой-то другой файл? - person nunop; 18.03.2016
comment
Небольшое примечание о rsync: он не будет работать в Vagrant 1.8.0 (из-за ошибки, которая еще не исправлена ​​в 1.8.1). Однако для этого есть обходной путь. Об этом сообщается здесь. - person nunop; 19.03.2016

Так получилось, что проблема была связана с VirtualBox, как объяснено здесь. Поскольку я запускаю Nginx на виртуальной машине в VirtualBox, решение моей проблемы состояло в том, чтобы закомментировать директиву sendfile в nginx.conf или просто отключить ее, например:

sendfile off;

О той же проблеме сообщается здесь, и здесь. А также в документах Vagrant, в которых говорится, что "Есть ошибка VirtualBox, связанная с sendfile, которая может привести к повреждению или отсутствию обновления файлов».

person nunop    schedule 19.03.2016