解决 Windows 系统使用 Homestead 运行 Laravel 本地项目响应缓慢问题

我们有专门的 Wiki 文章,请查阅:Wiki:Laravel Homestead:开启 NFS 解决站点响应缓慢

注意: 此方法可能带来未知副作用,请操作之前务必备份原配置文件!!

使用 win7 电脑学习第二本教程,发现项目运行起来切换页面每次都要 7-10 s,很不正常啊,部署到服务器发现加载仅需要 200 ms 左右。
file

尝试过增加虚拟机配置, 但是没有任何效果, 经过验证也不是数据库的原因,通过网上查询了解到, 是因为 VirtualBox 的 IO 引起的。

解决方案是安装NFS Plugin参考文章(英文)

英文不好的小伙伴接着看 ~

首先,命令行进入 Homestead 启动 vagrant

> cd ~/Homestead && vagrant up

然后运行安装命令

$ vagrant plugin install vagrant-winnfsd

file

如上图,安装成功后修改配置文件

修改配置文件前建议先备份,以免修改后出现问题!

文件1:homestead/scripts/homestead.rb

# Register All Of The Configured Shared Folders
if settings.include? 'folders'
    settings["folders"].each do |folder|
        if File.exists? File.expand_path(folder["map"])
            mount_opts = []

            if (folder["type"] == "nfs")
                mount_opts = folder["mount_options"] ? folder["mount_options"] : ['actimeo=1', 'nolock']
            elsif (folder["type"] == "smb")
                mount_opts = folder["mount_options"] ? folder["mount_options"] : ['vers=3.02', 'mfsymlinks']
            end

            # For b/w compatibility keep separate 'mount_opts', but merge with options
            options = (folder["options"] || {}).merge({ mount_options: mount_opts })

            # Double-splat (**) operator only works with symbol keys, so convert
            options.keys.each{|k| options[k.to_sym] = options.delete(k) }

            config.vm.synced_folder folder["map"], folder["to"], type: folder["type"] ||= nil, **options

            # Bindfs support to fix shared folder (NFS) permission issue on Mac
            if Vagrant.has_plugin?("vagrant-bindfs")
                config.bindfs.bind_folder folder["to"], folder["to"]
            end
        else
            config.vm.provision "shell" do |s|
                s.inline = ">&2 echo \"Unable to mount one of your folders. Please check your folders in Homestead.yaml\""
            end
        end
    end
end

查找此段代码(可能略有不同),替换为以下内容

if settings.include? 'folders'
  settings["folders"].sort! { |a,b| a["map"].length <=> b["map"].length }

  settings["folders"].each do |folder|
    config.vm.synced_folder folder["map"], folder["to"], 
    id: folder["map"],
    :nfs => true,
    :mount_options => ['nolock,vers=3,udp,noatime']
  end
end

文件2:Homestead.yaml

folders:
    - map: ~/Code
      to: /home/vagrant/Code
      type: "nfs"

重启 Homestead 使配置文件生效,大功告成。再次运行项目响应时间已经正常了,希望帮助有相同情况的小伙伴!
file

本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由 Summer 于 6年前 加精
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 112
Summer

已经增加至文档里 —— Windows 下的 Homestead 开发环境搭建

6年前 评论

@leung0826 现在换域名了执行这个可以
vagrant plugin install vagrant-vbguest --plugin-clean-sources --plugin-source https://gems.ruby-china.com/

5年前 评论
Cosmos 3年前
Summer

已经增加至文档里 —— Windows 下的 Homestead 开发环境搭建

6年前 评论

@leung0826 现在换域名了执行这个可以
vagrant plugin install vagrant-vbguest --plugin-clean-sources --plugin-source https://gems.ruby-china.com/

5年前 评论
Cosmos 3年前

@lmaster 我也是萌新…… 学习 laravel 还不到 2 个月呢!很多东西还不理解,只是感觉如果项目在开发者的电脑上都不能流畅运行,那将来面对更低配的普通用户,体验是要多糟糕。然后部署上线(阿里云低配 ECS 服务器),发现页面加载时间仅仅200毫秒左右,这就证明了代码没问题,问题出在本地环境,家里使用 iMac 并没有出现这种情况,但在公司的 win 系统这么慢,然后就去度娘(英文太渣谷歌有压力啊)搜索 win系统运行laravel页面加载缓慢、 win7 Homestead 运行 laravel 页面加载缓慢 等等关键词去搜索,会有很多相关文章,多看几篇找到最普遍的解决方案,然后去亲自测试,备份好之前的文件,然后就折腾吧 ~ 问答区置顶文章 断言:不懂《提问的智慧》的人不会从初级程序员水平毕业 对我启发很大,强烈建议阅读 《提问的智慧》原文,解决问题的过程也是学习的过程,加油、共勉!也希望自己能在 2018 年转行进入 IT 行业!

6年前 评论

我每次composer require都会都会报同样的错误,只有将vendor删除之后使用install才能恢复正常。
file
通过google搜索答案,发现另一个国外论坛这样解释(地址
file
从图中可以知道通过nfs会导致composr出现问题,虽然是一年前的回答,还是希望知道我这个错误到底是为什么
(VirtualBox 5.2.8, vagrant 2.0.2)

6年前 评论
leung0826

file
被强了怎么办?
试试这个
vagrant plugin install vagrant-vbguest --plugin-clean-sources --plugin-source https://gems.ruby-china.org/

5年前 评论

@Morrow @韩槑槑 有个临时的方案,如果 composer 出现问题,先在 win10 里杀掉 NFS server for windows 这个进程,然后vagrant reload一下就好了,麻烦是麻烦点,但比去掉 nfs 慢的一比强啊

5年前 评论

@Summer 感谢龙哥 :smiling_imp: 第二本教程学习一半了,真心强大,干货满满!期待你的安卓和IOS开发 ~

6年前 评论
lmaster

@Yvan 兄弟,这个你是怎么发现的,能否给下你的思路,我觉得这个才是重点(最好是那种流水式小说体,比如:今天我搭建Homestead 跑了下larabbs发现页面加载很慢 1s-2s,但是在服务器上很快<80ms,我的电脑也是i7-7xxxK,性能也不输服务器的,但是我的系统是win10,难道是这个问题。。。。。。编不下去了)。兄弟,真的想知道,每次遇到这种奇奇怪怪的东西,你们是怎么想的,然后去怎么搜索答案,我们这类萌新该怎么做,要学什么。望大手给个思路啊

6年前 评论

@Summer 老大,

根据这个优化流程走了一遍反馈下我这边出现的已知问题:

首先页面加载确实比未优化前快很多,原先1-2S,现在已经降到80ms左右 :metal: ,但是严重的副作用是 browserSync 的同步刷新出现了严重的迟滞,会产生不定期的迟滞,经常要过5-6s才会反应过来并刷新 :rage:,我这边webpack.mix.js的代码配置如下:

mix.js('resources/assets/js/app.js' , 'public/js')
    .sass('resources/assets/sass/app.scss' , 'public/css')
 mix.browserSync({
    host : '192.168.10.10' ,
    proxy : 'larabbs.test' ,   
    open : false ,
    files : [
        'app/**/*.php',
        'resources/views/**/*.php',
        'public/js/*.js',
        'public/css/*.css'
    ] ,
    watchOptions : {
        usePolling : true ,
        interval : 500
    }
});

经过多次尝试,发现只有不对文件:homestead/scripts/homestead.rb 文件进行修改,才能让 browserSync 恢复正常反应,但是页面的加载速度会保持在500ms左右,是否有两全其美的解决办法??

6年前 评论

WIN10本地开发 homestead真的慢的要死要死的, 这个用用看会快多少。

6年前 评论
create_xf

install 被墙了怎么办?

Installing the 'vagrant-winnfsd' plugin. This can take a few minutes...
Vagrant failed to load a configured plugin source. This can be caused
by a variety of issues including: transient connectivity issues, proxy
filtering rejecting access to a configured plugin source, or a configured
plugin source not responding correctly. Please review the error message
below to help resolve the issue:

  Errno::ECONNRESET: An existing connection was forcibly closed by the remote host. - SSL_connect (https://gems.hashicorp.com/specs.4.8.gz)

Source: https://gems.hashicorp.com/
6年前 评论

设置后每页总响应时间从600ms下降到470ms,还是有些作用,但不是特别明显

5年前 评论

赞一个,以前也用 Homestead 觉得响应很慢,现在用 docker 了,建议用 docker,速度更快!

5年前 评论
followyounger

file
win10 总是报错,我也没有解决好。。所以放弃了

5年前 评论
followyounger

@followyounger

file
是插件,安装失败了

5年前 评论
followyounger

@followyounger 解决了,插件安装好了之后,就没有问题了。

5年前 评论

这个安装之后的确是快了很多,但是我发现这会导致yarn install --no-bin-links报错,本以为是其他原因,但是刚又故意测试了一下的确是因为安装了这个才会导致的,暂时还没找到解决办法,没有人和我遇到一样情况吗?

file

5年前 评论

感谢 @Carlgao 使用 vagrant plugin install vagrant-winnfsd --plugin-clean-sources --plugin-source https://gems.ruby-china.com/ ,解决了被墙问题,成功装上了

5年前 评论
黑哈尔

重启出现如下问题

$ vagrant.exe provision && vagrant.exe reload
There are errors in the configuration of this machine. Please fix
the following errors and try again:

shell provisioner:
* `path` for shell provisioner does not exist on the host system: C:/Users/wanger/Homestead/scripts/serve-nfs.sh
* `path` for shell provisioner does not exist on the host system: C:/Users/wanger/Homestead/scripts/serve-nfs.sh
* `path` for shell provisioner does not exist on the host system: C:/Users/wanger/Homestead/scripts/serve-nfs.sh
* `path` for shell provisioner does not exist on the host system: C:/Users/wanger/Homestead/scripts/serve-nfs.sh
* `path` for shell provisioner does not exist on the host system: C:/Users/wanger/Homestead/scripts/serve-nfs.sh
* `path` for shell provisioner does not exist on the host system: C:/Users/wanger/Homestead/scripts/serve-nfs.sh
* `path` for shell provisioner does not exist on the host system: C:/Users/wanger/Homestead/scripts/serve-nfs.sh
5年前 评论
Jadedev 4年前
user02 4年前

如果出现 mount.nfs: Connection timed out 这种提示
请修改 Homestead 目录下的 Vagrantfile 文件
加入以下代码:
config.vm.network "private_network", type: "dhcp"
位置如下图所示:
file
修改完成后 你可能需要执行 vagrant provision && vagrant reload 才能恢复正常
具体请参考虚拟机打开时的提示

4年前 评论
devin_feng 3年前

国内镜像安装

vagrant plugin install  vagrant-winnfsd --plugin-clean-sources --plugin-source https://gems.ruby-china.com/
3年前 评论
Toiu

看到立马就搞了下, 效果还是可以的 不过我原来没那么慢 之前普通页面 2秒 左右的响应时间, 安装后基本在1秒左右 效果还不错.

6年前 评论

@刘滔 哈哈,我的原来最慢的时候 十二秒。。。慢的吓人

6年前 评论
Toiu

@Yvan 现在好咯 再也不会被无数次的零零碎碎的等待消磨生命了... 点赞

6年前 评论
黑将军

666,加载速度果然快很多

6年前 评论

@黑将军 哈哈,也看下这样配置之后会不会有其他影响,目前我这边是一切正常!

6年前 评论
黑将军

@Yvan 目前好像没啥影响,一切正常,赞 :+1:

6年前 评论
Toiu

@黑将军
@Yvan 好气哦~ 你们都没事, 我这 storage 软链的图片就加载不了

6年前 评论

@Toiu 文件夹权限问题? sudo chmod -R 775 storage/

6年前 评论
Toiu

@Yvan 看过了 是777的 我配置退回去原来的 重启又好了, 再搞过来 重启, 又挂了~

6年前 评论

@Toiu laravel中通过url访问存储在storage下面的图片 ,或者搜索下,我直接存了张图片到这个文件夹好像也无法读取

6年前 评论
Toiu

我用软链的 而且 在正常模式下是可以访问到的, 应该不是路径的问题, 可能是配置中某种高端问题:smile:

6年前 评论
黑将军

@Toiu 我没有用软链,没发现这个问题 :joy:

6年前 评论

你好,为什么我安装后更改完文件 vagrant reload 重启后提示

Path D:/Code with path alias /D/Code already known

我忽略这个提示进入虚拟机后,cd Code/ 后虚拟机就会卡住

文件 homestead/scripts/homestead.rb:

if settings.include? 'folders'
  settings["folders"].sort! { |a,b| a["map"].length <=> b["map"].length }

  settings["folders"].each do |folder|
    config.vm.synced_folder folder["map"], folder["to"], 
    id: folder["map"],
    :nfs => true,
    :mount_options => ['nolock,vers=3,udp,noatime']
  end
end

文件 Homestead.yaml:

folders:
    - map: D:/Code
      to: /home/vagrant/Code
      type: nfs
6年前 评论

@sayhe110 不应该是 cd ~/Code 吗?

6年前 评论

@Yvan 我虚拟机启动后目录是 ~ 所以我直接 cd /Code 了,,,现在虚拟机就是会一直卡,这是咋回事

6年前 评论

@sayhe110 我也是萌新…… 搞不懂了 :joy:

6年前 评论

@Teles 记得备份,原来的配置文件~ 不知道会不会带来一些副作用。win 系统的坑好多啊,Mac 上就不用这样!

6年前 评论

@Yvan 没事没事,,你已经很厉害了

6年前 评论

file

这个问题....有遇到过的吗

6年前 评论
懒惰的大叔 4年前

用了一段时间,发现webpack打包有时候会失败

5年前 评论
Toiu

@Yvan 后来发现并不是这里的坑. 删掉软链重新生成就好了 估计是修改之后映射的路径有不同的原因把~

5年前 评论

@Toiu 问题解决了太好了~ 我还在担心这种方式会不会带来严重的副作用 ,哈哈!

5年前 评论
Toiu

@Yvan 当时脑袋抽了居然没想到是软链的问题, 就没使用了, 前两天突然闪过这个念头 试了一下 果然正常了.

5年前 评论

@雷 已经解决了,原因是因为被墙了

5年前 评论

发现一个副作用,优化之后 npm run dev 和 npm run watch-poll 有几率报错,大致原因是没有操作权限,而且sass的响应速度变得非常慢。

5年前 评论

@Yvan 刚试过了,还是不行呀。yarn install --no-bin-links 这步编译就过不了,也是说权限问题,无法rm和cp,我使用sudo yarn install --no-bin-links才勉强通过编译,然后 npm run dev 和 npm run watch-poll 就会出现不稳定的故障,sass编译延迟也非常缓慢。把优化去掉就没这些问题了。

5年前 评论

@sayhe110 你这个问题最后是如何解决的,没查到相关。早上来一直卡的不行,然后用了重启大法又可以了

5年前 评论

@Leon1993 没有搞好,卡了的话我也是重启 :sweat:

5年前 评论
Toiu

@纸牌屋弗兰克 docker在window环境下好用吗 比如win7

5年前 评论
Toiu

@纸牌屋弗兰克 多谢推荐

5年前 评论

@sayhe110 我把原来改的配置还原了之后现在正常了

5年前 评论

@sayhe110 cd /Code指的是进入根目录的Code目录,你要把/去掉,在~目录下面cd Code就相当于在任何目录cd ~/Code

5年前 评论
leung0826

@纸牌屋弗兰克 win10 for docker 也有运行慢,同样的问题

5年前 评论

现在这个速度真的是超级快啊

5年前 评论
幽弥狂

@纸牌屋弗兰克 你用 laradock 么??

5年前 评论

Mac下也不快,有什么办法优化吗

5年前 评论
幽弥狂

@纸牌屋弗兰克 我试了几次 然后放弃了,,,

5年前 评论

最近电脑出现了一系列的问题,重装系统过后开始配置Laravel环境,使用该方法进行加速过后刷新网页出现 502 BadGateWay 的情况,找了半天,终于找到了问题,总之来说只怪自己没细心看提示,如果出现一样问题的朋友,记得一定要运行:$ vagrant provision

file

5年前 评论

有没有人和我一样,初次安装vagrant-winnfsd使用没有问题,隔天重新启动的时候就这样了?

file

5年前 评论

请教一下各位大大,怎么解决安装vagrant-winnfsd被墙问题?本机win10已经开了蓝灯~

5年前 评论

安装之后出现这个情况!

file

5年前 评论

file
file

使用nfs, 还想使用public_network, 有何解决办法

5年前 评论

@ghmaga 我也是这样 有什么解决办法吗?

5年前 评论

@韩槑槑
虽然时隔很久,仍忍不住发问,这到底是什么原理,难道真是WIN 10坑?
昨天我也出现了composer安装第三方包失败,报错跟你一样,然后GOOGLE找到了跟你一样的论坛,最后把type:nfs删除就解决了。
不理解其原理,其二是没了nfs响应速度实在太慢了~

5年前 评论

@zgy0777 不清楚诶,没了 nfs 慢就慢呗,反正也只是本地开发使用。

5年前 评论

这样配置了之后,ssh上去,直接在终端打开共享目录还是很慢 = = 有没有遇到终端打开目录很慢的啊,习惯在终端直接调试,ls半天出不来很难受....

5年前 评论
任飘渺

@Teles 并没有吧..我的目前很稳定

5年前 评论
JasonG

@Kicoo 我也有遇到这个问题,把 nfs 模式去掉就不会报错,不知道你解决了吗?

5年前 评论

用过的都说好!!!

5年前 评论

Mac运行很慢,要怎么解决?

5年前 评论

@Armin 哥们你解决了么?mac我运行超级慢,要十几秒

5年前 评论

@Morrow 不知道哈。我现在没有用 homestead 了。

5年前 评论

file
shell provisioner:

  • path for shell provisioner does not exist on the host system: C:/Users/Shawn/Homestead/scripts/serve-nfs.sh
5年前 评论
user02 4年前

Windows 10 也可以吗, ntf

5年前 评论

@heibai_2018 同样的问题,好像是window本地文件夹与虚拟机的文件夹的映射关系没连上,导致挂载失败了。目前还不知道怎么解决

5年前 评论

@chengjiabing 你这情况,虚拟机的code文件夹下的项目也没了吧

5年前 评论

@shaokeke 我也是同样的问题 你解决了吗?

5年前 评论

三四秒降到一百多毫秒。 好评!

5年前 评论

速度是提升了,但是 命令行 进入 Code 会卡着不动了

4年前 评论

@Yvan 进入 Code 目录会很卡着,你这边是怎么处理的,我返回原来配置,结果 自定义的域名 都只能访问 同一个 项目,求解决!!

4年前 评论

我win10 装homestead 使用nfs后Code文件夹中文乱码,有人遇到过相同问题吗?

4年前 评论

@Summer 为何要加,准备加速一下的,结果被告知已经是最高时速了 @@

4年前 评论

vagrant plugin install vagrant-winnfsd
安装好慢。。。
怎么解决?

4年前 评论
hangzatm 4年前

写给跟我遇到一样问题的同学:
如果遇到了如下图所示的问题,就把homestead.rb和Homestead.yaml的所有TAB改为空格
这是因为我在复制版主的代码后,想格式化一下,结果不小心全都用tab键了.

参考链接:https://segmentfault.com/q/101000001054218...

file

可以使用 Notepad++ 自带的一键全部 TAB 转空格功能

Laravel

4年前 评论
hangzatm (作者) 4年前

安装完后修改完两个文件后就报错了,然后我把两个文件恢复,重启homestead。。好神奇。。居然好快。。

4年前 评论

哇,试了一下,这种好贴应该早点找到 :+1:

4年前 评论

按照楼主的教程,配置完后,直接提示,在访问原先的地址,提示:No input file specified.

4年前 评论
devin_feng 3年前

按教程配置完提示 No input file specified 这是什么原因啊

4年前 评论

为什么vagrant provision && vagrant reload 重启访问默认的项目打不开No input file specified.,教程的项目可以打开 ,难道是一个项目一个ip的原因?
我的配置为

Laravel

file

4年前 评论
阳光号总钻风 2年前

4-5s变成200ms,真香 :+1: :+1:

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!