0

Chef レシピを実行するオムニバス インストールでのサード パーティの gem の使用に関する質問について、誰か助けていただけませんか? omn​​ibus でパッケージ化された「p4ruby」gem を使用して、レシピで使用できるようにしたいと考えています。

require 'P4'

エラーが発生します

cannot load such file -- P4

インストールディレクトリで見ることができます

./embedded/service/gem/ruby/2.1.0/gems/p4ruby-2015.1.0/ext/P4/p4rubyconf.h
./embedded/service/gem/ruby/2.1.0/gems/p4ruby-2015.1.0/ext/P4/p4rubydebug.h
./embedded/service/gem/ruby/2.1.0/cache/p4ruby-2015.1.0.gem
./embedded/service/gem/ruby/2.1.0/specifications/p4ruby-2015.1.0.gemspec
./embedded/service/gem/ruby/2.1.0/build_info/p4ruby-2015.1.0.info
./embedded/lib/ruby/gems/2.1.0/gems/p4ruby-2015.1.0/ext/P4/p4rubyconf.h
./embedded/lib/ruby/gems/2.1.0/gems/p4ruby-2015.1.0/ext/P4/p4rubydebug.h
./embedded/lib/ruby/gems/2.1.0/cache/p4ruby-2015.1.0.gem

私はChefのドキュメントを読み、たとえばchef_gemまたはgem_packageを使用できることを確認しました

gem_package 'p4ruby' do
end

ただし、これは常に gem をコンパイルしようとするため、makeg++などの開発ツールが利用可能であるとは期待できず、それらを強制的にインストールしたくないため、ターゲット インストール環境でエラーが発生します。

Chef にこの gem を「見て」もらい、コンパイルを実行せずにサードパーティの gem を指定するにはどうすればよいですか? これは可能ですか?

詳細については、 makeg++を備えたマシンでgem_packageを使用すると、最終的にインストール ディレクトリに次のようになります (以前とは少し異なります)。これはパスの問題ですか?? 私はすべてを検索しましたが、解決策を見つけることができません

./embedded/service/gem/ruby/2.1.0/gems/p4ruby-2015.1.0/ext/P4/p4rubyconf.h
./embedded/service/gem/ruby/2.1.0/gems/p4ruby-2015.1.0/ext/P4/p4rubydebug.h
./embedded/service/gem/ruby/2.1.0/cache/p4ruby-2015.1.0.gem
./embedded/service/gem/ruby/2.1.0/specifications/p4ruby-2015.1.0.gemspec
./embedded/service/gem/ruby/2.1.0/build_info/p4ruby-2015.1.0.info
./embedded/lib/ruby/gems/2.1.0/gems/p4ruby-2015.1.0/ext/P4/p4rubyconf.h
./embedded/lib/ruby/gems/2.1.0/gems/p4ruby-2015.1.0/ext/P4/p4rubydebug.h
./embedded/lib/ruby/gems/2.1.0/cache/p4ruby-2015.1.0.gem
./embedded/lib/ruby/gems/2.1.0/specifications/p4ruby-2015.1.0.gemspec

助けてくれてありがとう

4

2 に答える 2

0

Chef にこの gem を「見て」もらい、コンパイルを実行せずにサードパーティの gem を指定するにはどうすればよいですか? これは可能ですか?

いいえ、gem に何らかのC拡張機能がある場合は、コンパイルする必要があり、ビルド ツールが必要になります。そのため、build-essential cookbook があります。

chef_gemとの違いは次のgem_packageとおりです。

  • gem_packageシステム Ruby にインストールされます (または、デフォルトで Chef 組み込み Ruby が存在しません)。chef_gem常に Chef 組み込み Ruby にインストールされます。
  • gem_packagechef_gemコンパイル時に実行される収束フェーズで実行

主な理由は、シェフ外で使用するシステム gem を管理することを目的としchef_gemたレシピで使用する gem をインストールすることを目的としているためです。gem_package

于 2015-09-11T12:00:38.153 に答える