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
Все время сайт перезагружается, как ожидалось, но его содержимое не отражает изменений, которые были сделаны. Я не могу понять, что я делаю неправильно здесь. Любой намек оценили!
UPDATE
Я забыл упомянуть, что на моей главной машине работает 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. Но теперь бродяга останавливается, когда пытается установить общую папку NFS.
Кроме того, поскольку я получил следующую ошибку на vagrant up
: GuestAdditions versions on your host (5.0.16) and guest (4.3.36) do not match
, я установил плагин vagrant-vbgues, в чтобы обновить гостевые дополнения VirtualBox. Безрезультатно. Vagrant все еще зависает, когда пытается установить общую папку NFS.
Ответы
Ответ 1
Так получилось, что проблема связана с VirtualBox, как объясняется здесь. Поскольку я запускаю Nginx на виртуальной машине в VirtualBox, решение моей проблемы состояло в том, чтобы прокомментировать директиву sendfile
в nginx.conf
или просто отключить ее, например:
sendfile off;
О той же проблеме сообщается здесь, и здесь. Как и в Vagrant docs, в котором говорится, что "существует ошибка VirtualBox, связанная с sendfile
, которая может привести к повреждению или не обновляющие файлы."
Ответ 2
Название и теги говорят, что вы используете Vagrant, хотя это не упоминается в вашем вопросе.
Убедитесь, что ваши изменения синхронизируются с виртуальной машиной. Посмотрите бродячую документацию, чтобы выбрать тип синхронизированных папок, которые будут работать для вашей ситуации. Их основной пример таков:
Vagrant.configure("2") do |config|
# other config here
config.vm.synced_folder "src/", "/srv/website"
end
Вы можете vagrant ssh
и проверить файлы вручную, чтобы убедиться, что они совпадают, и что синхронизированные папки работают должным образом.
UPDATE
На основе новой информации и комментариев я бы рекомендовал использовать rsync
как метод общих папок.
config.vm.synced_folder "Host/Path/", "/Guest/Path", type: "rsync",
rsync__exclude: [ '.git', 'logs'],
rsync__args: ["--verbose"],
rsync__chown: false
Я никогда не нашел способ сделать NFS хорошо (и хорошо работать), если Windows находится в миксе.