2016-11-04 4 views
0

私は、load_current_valueブロックに "require"する前にgemをインストールする必要があるChef 12.5スタイルのカスタムリソースを持っています。私はchef_gemリソースを使用しようとしましたが、私がそこで使用するときはchef_gemにNoMethodErrorがあります。シェフ12.5スタイルのカスタムリソース:load_current_valueブロックに必要な宝石をインストールしますか?

load_current_value do 
    Chef::Resource::ChefGem.new 'inifile' do 
    compile_time true 
    end 
    require 'inifile' 
    # ... load_current_value code 
end 

を...しかし、明示的にChef::Resource::ChefGem.newを呼び出すことは間違っていると思われる、または少なくとも "無粋。":これは動作します

これは宝石をアクションに利用できるようにします。便利です。しかし、chef_gemをload_current_valueブロックに(または先に)インストールするより適切な方法があるのだろうか?私が正しくリコールシェフ12.8からそれがspecify gems in metadata.rbに可能なら

答えて

2

(宝石のキーワードを探してください):

Specifies a gem dependency to be installed via the chef_gem resource after 
all cookbooks are synchronized, but before any other cookbook loading is 
done. Use this attribute once per gem dependency. 

私は、これはあなたが探している「もの」だと思います。

+0

はい、ありがとうございます。それは正解です。これは一般的なケースで動作し、私の '' load_current_value''問題を解決します。 このように '' gem 'mysql2'''を使用するとクラッシュしてしまいます(パッケージの依存関係のために一時的な問題が発生する可能性があります)ので、メタデータソリューションを使用して放棄しました。 –

+0

問題は、シェフが起動したときに宝石をインストールすることです。これは、コンパイラの前か、mysqlライブラリが利用可能である(レシピを介してインストールすると仮定した場合)。これは発注の難しさにつながります。 – coderanger

+0

..それはあなたのcheffedホストがすべてrubygems.orgやad-hoc gemのダウンロード用のプロキシを打つ必要があります。 セキュリティの問題は面白いです。 – user2066657