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