7

Mixlib チームに報告したこのMIXLIB-11エラーが発生しているため、Mixlib::Shellout に代わる回避策を見つける必要があります。

問題について簡単に:

「*驚くことではありません -- 読み取りはコンパイル時に行われますが、remote_file リソースは実際には実行時に作成されます。**」

この機能により、この現在のレシピに含まれる以前のレシピによって実行時にそのディレクトリが作成されていても、Mixlib::Shellout.new("ls", :cwd => '/opt/cubrid/share/webmanager')No such file or directory 」エラーが発生します。

実行時にファイル/ディレクトリを読み取る方法はありますか?

4

4 に答える 4

14

答えが見つかりました: コードを でラップするruby_blockと、実行時に実行されます。

ruby_block "Check if CURBID Web Manager needs installation" do
  block do
    version = ""

    if File.exists?("#{CWM_HOME_DIR}/appLoader.js")
      # Read the CWM version from file.
      f = File.open("#{CWM_HOME_DIR}/appLoader.js")

      pattern = /Ext\.cwm\.prodVersion = '(\d+\.\d+\.\d+\.\d+)'/

      f.each {|line|
        if match = pattern.match(line)
          version = match[1]
          break
        end
      }

      f.close
    end
  end
end

これで、前のレシピで作成されたファイルからバージョンが正しく取り込まれました。

于 2013-03-29T02:29:01.103 に答える
-4

を検討してくださいremote_file。これは実行 (実行) 時に実行され、次のようなローカル ファイルでも動作します。

remote_file "Copy file" do
  path "file:///opt/destination.txt"
  source "file:///opt/source.txt"
  owner 'root'
  group 'root'
  mode 0755
end

したがって、使用remote_fileは良い回避策です。カスタム コードの作成には時間がかかり、エラーが発生しやすくなります。この回答も参照してください。

于 2014-12-20T06:30:41.637 に答える