Edited at

vagrant-berkshelf プラグインをwindows環境で動作させる方法

More than 3 years have passed since last update.


Encoding::InvalidByteSequenceError の問題について

Windows上のvagrant 環境でvagrant-berkshelf プラグインをインストールすると、コマンドプロンプトから vagrant up を実行した際に以下のエラーが出ます。

The stdout and stderr are shown below:

stdout:
stderr: C:/opscode/chefdk/embedded/lib/ruby/gems/2.0.0/gems/json-1.8.2/lib/j
son/common.rb:155:in `encode': "\xA0" on Windows-31J (Encoding::InvalidByteSeque
nceError)

このエラーは、 C:\opscode\chefdk\bin\berks.bat に「set RUBYOPT=-EUTF-8」の記述を追加することで回避できます。

かなりワークアラウンドっぽいですが...

しかし、Chef Development Kit はそれほどアップデートが激しくないので、おそらく問題ないと思います。

修正前 (berks.bat)

  @ECHO OFF

"%~dp0\..\embedded\bin\ruby.exe" "%~dpn0" %*

修正後 (berks.bat)

  @ECHO OFF

set RUBYOPT=-EUTF-8
"%~dp0\..\embedded\bin\ruby.exe" "%~dpn0" %*

なお、Berkshelf をコマンドプロンプトから直接実行した場合も、同様のエンコーディングに関するエラーになりますが、こちらはコントロールパネルの「システム」から環境変数を設定することでも回避可能です。

参考URL:

http://crosawassant.hatenablog.com/entry/2015/02/06/121321


Vagrantfile の chef.cookbooks_path が上書きされてしまう問題について

vagrant-berkshelf プラグインを有効にすると、Vagrantfile の chef.cookbooks_path が上書きされ、強制的に cookbooks ディレクトリ のみを参照するようになります。

通常 Chef を単体で使用している場合は site-cookbooks ディレクトリ配下にクックブックを記述していくので、結果として vagrant-berkshelf プラグインを有効にした途端に、Cookbook not found エラーが頻発することになります。

この問題の解決は、Berkshelf の流儀?に沿って cookbooks ディレクトリに全てのクックブックをまとめるような運用フローにするか、またはこの辺りのPRが取り込まれるのを待つしかないようです。

https://github.com/berkshelf/vagrant-berkshelf/pull/266