解决 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 于 7年前 加精
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 112
Summer

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

7年前 评论

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

6年前 评论
Cosmos 4年前
Toiu

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

7年前 评论

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

7年前 评论
Toiu

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

7年前 评论
Summer

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

7年前 评论

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

7年前 评论
黑将军

666, 加载速度果然快很多

7年前 评论

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

7年前 评论
黑将军

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

7年前 评论
Toiu

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

7年前 评论

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

7年前 评论
Toiu

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

7年前 评论

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

7年前 评论
Toiu

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

7年前 评论
黑将军

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

7年前 评论
lmaster

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

7年前 评论

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

7年前 评论

你好,为什么我安装后更改完文件 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
7年前 评论

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

7年前 评论

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

7年前 评论

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

7年前 评论

@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 左右,是否有两全其美的解决办法??

7年前 评论

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

7年前 评论

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

7年前 评论

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

7年前 评论

file

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

7年前 评论
懒惰的大叔 5年前
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/
7年前 评论

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

7年前 评论

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

7年前 评论

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

7年前 评论
leung0826

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

7年前 评论

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

7年前 评论
Toiu

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

7年前 评论

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

7年前 评论
Toiu

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

7年前 评论

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

7年前 评论

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

7年前 评论

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

7年前 评论

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

7年前 评论

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

7年前 评论
Toiu

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

7年前 评论
Toiu

@纸牌屋弗兰克 多谢推荐

7年前 评论

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

7年前 评论

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

7年前 评论
leung0826

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

7年前 评论
followyounger

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

7年前 评论
followyounger

@followyounger

file
是插件,安装失败了

7年前 评论
followyounger

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

7年前 评论

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

6年前 评论
幽弥狂

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

6年前 评论

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

6年前 评论
幽弥狂

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

6年前 评论

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

file

6年前 评论

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

file

6年前 评论

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

file

6年前 评论

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

6年前 评论

安装之后出现这个情况!

file

6年前 评论

file
file

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

6年前 评论

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

6年前 评论

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

6年前 评论
Cosmos 4年前

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

6年前 评论

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

6年前 评论

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

6年前 评论

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

6年前 评论
任飘渺

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

6年前 评论
JasonG

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

6年前 评论

用过的都说好!!!

6年前 评论

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

6年前 评论

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

6年前 评论

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

6年前 评论

file
shell provisioner:

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

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

6年前 评论

Windows 10 也可以吗, ntf

6年前 评论

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

6年前 评论

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

6年前 评论

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

6年前 评论
黑哈尔

重启出现如下问题

$ 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
6年前 评论
Jadedev 5年前
user02 5年前

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

6年前 评论

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

6年前 评论

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

6年前 评论

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

6年前 评论

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

6年前 评论

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

5年前 评论
devin_feng 5年前

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

5年前 评论
hangzatm 5年前

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

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

file

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

Laravel

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

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

5年前 评论

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

5年前 评论

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

5年前 评论
devin_feng 5年前

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

5年前 评论

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

Laravel

file

5年前 评论
阳光号总钻风 3年前

国内镜像安装

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

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

4年前 评论