一、開(kāi)發(fā)環(huán)境
系統(tǒng):OSX 10.10.5
vagrant版本:vagrant1.7.4
虛擬機(jī)box:vagrant-centos-6-7.box
本人使用vagrant搭建了centOS6.7虛擬機(jī)開(kāi)發(fā)環(huán)境,用作web開(kāi)發(fā)。mac電腦選用公司的網(wǎng)線上網(wǎng),也就是使用網(wǎng)卡“en0: 以太網(wǎng)”。
但最近碰到一個(gè)棘手的問(wèn)題。
注:關(guān)于vagrant搭建可以參考github:https://github.com/astaxie/Go-in-Action/blob/master/ebook/zh/01.1.md
二、問(wèn)題描述
想選擇橋接模式讓虛擬機(jī)上網(wǎng),于是在mac端編輯Vagrantfile,添加 config.vm.network "public_network",并將其他的network設(shè)置注釋掉。vagrant up啟動(dòng)虛擬機(jī)之后,看到如下的輸出:
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Clearing any previously set network interfaces...
==> default: Available bridged network interfaces:
- en0: 以太網(wǎng)
- en1: Wi-Fi (AirPort)
- en2: Thunderbolt 1
- en3: Thunderbolt 2
- p2p0
- awdl0
- bridge0
==> default: When choosing an interface, it is usually the one that is
==> default: being used to connect to the internet.
default: Which interface should the network bridge to?
因本人使用網(wǎng)線上網(wǎng),于是選擇了1) en0: 以太網(wǎng),選擇1之后看到如下輸出(后面還有很多報(bào)錯(cuò)省略了):
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
default: Adapter 2: bridged
/opt/vagrant/embedded/gems/gems/vagrant-1.7.4/lib/vagrant/util/subprocess.rb:28:inencode': "/xE4" from ASCII-8BIT to UTF-8 (Encoding::UndefinedConversionError) from /opt/vagrant/embedded/gems/gems/vagrant-1.7.4/lib/vagrant/util/subprocess.rb:28:inblock in initialize'
from /opt/vagrant/embedded/gems/gems/vagrant-1.7.4/lib/vagrant/util/subprocess.rb:28:in `map'
三、解決問(wèn)題
仔細(xì)查看報(bào)錯(cuò)信息:
/opt/vagrant/embedded/gems/gems/vagrant-1.7.4/lib/vagrant/util/subprocess.rb:28:in `encode': "/xE4" from ASCII-8BIT to UTF-8 (Encoding::UndefinedConversionError)
1、看到上面的報(bào)錯(cuò)我是崩潰的,在google和百度找了很久,沒(méi)找到答案。經(jīng)過(guò)幾番測(cè)試,我發(fā)現(xiàn)只有選擇1) en0: 以太網(wǎng)才會(huì)報(bào)類(lèi)似的錯(cuò)誤,選擇其他的選項(xiàng)時(shí),雖然連不聯(lián)網(wǎng),但是不會(huì)報(bào)這樣的錯(cuò)。我懷疑可能是編碼問(wèn)題!
2、仔細(xì)查看第一行報(bào)錯(cuò)“subprocess.rb:28:in `encode': "/xE4" from ASCII-8BIT to UTF-8 (Encoding::UndefinedConversionError)”??梢钥闯鼍褪蔷幋a轉(zhuǎn)換問(wèn)題了。
3、按照?qǐng)?bào)錯(cuò)信息,找到文件/opt/vagrant/embedded/gems/gems/vagrant-1.7.4/lib/vagrant/util/subprocess.rb
4、vim這個(gè)文件,找到第28行可以看到
1@command = @command.map { |s| s.encode(Encoding.default_external) }
以上是Ruby語(yǔ)法,本人也不懂ruby,剛開(kāi)始束手無(wú)策,google了一下ruby編碼轉(zhuǎn)換的問(wèn)題,嘗試把上面這行改動(dòng)了一下,改為以下內(nèi)容:
1@command = @command.map { |s| s.force_encoding('UTF-8') }
注意:不知道ruby對(duì)空格要求嚴(yán)不嚴(yán)格,改動(dòng)后的代碼兩邊的大括號(hào)保留了空格!
5、退出保存,重新vagrant up啟動(dòng)虛擬機(jī),再次選擇“1) en0: 以太網(wǎng)”發(fā)現(xiàn)虛擬機(jī)正常啟動(dòng)!問(wèn)題得到了解決
本文轉(zhuǎn)載自:http://www.th7.cn/system/mac/201511/141081.shtml