Homestead 使用問題及解決方式

jormin發表於2017-03-31

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 協議》,轉載必須註明作者和本文連結

相關文章