Homestead 使用问题及解决方式

Homestead 是一个很棒的官方集成环境虚拟机,使用它开发可以大大减少折腾环境的时间和精力,并且不用在自己的机器上装一大堆的软件,即便 Homestead 出问题了,也可以快速的销毁当前的虚拟机,并且在几分钟内重新创建一个新的虚拟机出来。

不过使用过程中,也是发现了一些体验不好的地方:

使用过程中如果断电或者关机,会造成虚拟机出现一些很奇怪的问题。

针对这个问题,要养成断电或者关机前先关闭虚拟机(vagrant halt)的习惯,毕竟相对于出问题后重新创建虚拟机并且进行配置以及创建项目初始数据等操作,预先关闭虚拟机要轻松的多。

如果销毁或者重新加载虚拟机配置虚拟机的时候,会造成之前的一些配置和数据文件丢失。

针对这个问题,销毁新建或者重构虚拟机前,虚拟机都会在完成操作后执行 ~/Homestead/after.sh 脚本,所以我们可以在这个脚本中增加我们常用的一些操作命令,比如:配置composer镜像配置npm镜像初始化项目数据 等,相关代码如下:

#!/bin/sh

# If you would like to do some extra provisioning you may
# add any commands you wish to this file and they will
# be run after the Homestead machine is provisioned.

# 配置Composer使用中国镜像
composer config -g repo.packagist composer https://packagist.phpcomposer.com

# 配置npm使用淘宝镜像,使用淘宝镜像有两种方式

# 方式一:只修改npm镜像地址为淘宝镜像地址
sudo npm config set registry " https://registry.npm.taobao.org "

# 方式二:安装淘宝的cnpm,使用方式和npm一样,只是安装时将npm命令修改为cnpm
# npm install -g cnpm --registry=https://registry.npm.taobao.org

# 创建数据库及初始化项目数据,这两项操作一般只需要在项目销毁重建时使用,虚拟机重构(vagrant provision)时需要注释掉以下代码
mysql -uhomestead -psecret -e "create database IF NOT EXISTS blog default charset utf8 COLLATE utf8_general_ci;"
cd ~/Code/blog && php artisan migrate:refresh --seed

这里需要注意两点:

  1. 网上教程中说是修改 ~/.homestead/after.sh 脚本,但我测试不成功,只有修改 ~/Homestead/after.sh 脚本才会被执行到。

  2. 配置Composer使用中国镜像时建议不使用 sudo 命令,否则系统会报出警告:

    Do not run Composer as root/super user! See https://getcomposer.org/root for details

vagrant up 时总是会自动更新 composer

国内网络情况,直接 Update Composer ,总是会失败,所以我们可以在 vagrant up 屏蔽掉更新操作:

$ cd ~/Homestead
$ vim scripts/homestead.rb

在这个文件中屏蔽掉 Update Composer 那段代码 270-274行。

268         ...
269         # Update Composer On Every Provision
270         # config.vm.provision "shell" do |s|
271            # s.name = "Update Composer"
272            # s.inline = "sudo /usr/local/bin/composer self-update && sudo chown -R vagrant:vagrant /home/vagrant/.composer/"
273            # s.privileged = false
274         # end
                ...

这样开启虚拟机时就会发现已经不再更新 composer 了。

本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由 Summer 于 7年前 加精
jormin
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 8
幽弥狂

valet你值得拥有

7年前 评论
jormin

@xhh110 Valet 只支持 Mac,但我除了 Mac 外,还有台 Window 和 Linux(CentoOS) 也得用,所以只好选择Homestead了 :smile: :smile:

7年前 评论
幽弥狂

@jormin 不专情

7年前 评论
jormin

@xhh110 哈哈,毕竟老婆要经常拿走 mac 看电视剧 :smile:

7年前 评论
幽弥狂

@jormin 还好我不是单身狗,,,狗粮我不吃

7年前 评论
jormin

@xhh110 哈哈 :+1:

7年前 评论
jormin

@JokerLinly 哈哈 :laughing:

7年前 评论

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