2013-03-29 9 views
7

私はこのMIXLIB-11エラーを実行しているので、私はMixlibチームに報告しました.Maclib :: Shelloutの代わりにウォークアラウンドを見つける必要があります。問題について実行時にファイルの内容を読み取る方法は?シェフがコンパイル時に読む

簡単に言えば:

Here *」いいえ驚きを言わない文です - 読み取りがコンパイル時に起こっているが、REMOTE_FILEリソースが実際にでは、実行時にを作成しました**。そのディレクトリは、この現在のレシピに含まれる以前のレシピで、実行時に作成されていてもそのようなファイルやディレクトリはありません「エラー「ため、この機能の

Mixlib::Shellout.new("ls", :cwd => '/opt/cubrid/share/webmanager')が提起します」。

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

答えて

13

回答が見つかりました: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 

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

-2

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を使用すると、周りに良い仕事です。カスタムコードの作成には時間がかかり、エラーが発生する可能性があります。 this answerも参照してください。

+0

? – Cherry

+1

'remote_file'は、ファイルを転送(またはコピー)するためのものであり、読み込み用ではありません。 – sekrett

0

カスタムリソースを使用する場合は、load_current_valueメソッドを使用できます。コメントがdownvotedされてなぜ

action :some_action do 

    load_current_value do 
    if File.exist?('/var/www/html/index.html') 
     homepage IO.read('/var/www/html/index.html') 
    end 
    if File.exist?('/var/www/html/404.html') 
     page_not_found IO.read('/var/www/html/404.html') 
    end 
    end 

end 

https://docs.chef.io/dsl_custom_resource.html

関連する問題