ruby - software - ¿Cómo leer el contenido de un archivo en el momento de la ejecución? Chef lee en tiempo de compilación
docs chef io (3)
Encontré una respuesta: ruby_block
el código en ruby_block
y se ejecutará en tiempo de ejecución.
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
Ahora la versión está correctamente poblada del archivo creado en la receta anterior.
Debido a que me encuentro con este error MIXLIB-11 que informé al equipo de Mixlib, necesito encontrar una alternativa, alternativa a Mixlib :: Shellout.
Brevemente sobre el problema:
Aquí hay una declaración que dice "* No es sorpresa: la lectura está sucediendo en el momento de la compilación, pero el recurso remote_file en realidad se crea en el momento de la ejecución. **"
Debido a esta característica, Mixlib::Shellout.new("ls", :cwd => ''/opt/cubrid/share/webmanager'')
genera el error " No Mixlib::Shellout.new("ls", :cwd => ''/opt/cubrid/share/webmanager'')
ese archivo o directorio " aunque ese directorio se crea en el momento de la ejecución por una receta anterior incluida en esta receta actual.
¿Hay alguna forma de leer un archivo / directorio en el momento de la ejecución?
Si usa recursos personalizados, puede usar el método load_current_value
.
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
Considere un remote_file
. Se ejecuta en tiempo de ejecución (ejecución) y también puede funcionar con archivos locales, por ejemplo:
remote_file "Copy file" do
path "file:///opt/destination.txt"
source "file:///opt/source.txt"
owner ''root''
group ''root''
mode 0755
end
Entonces, usar remote_file
es un buen trabajo. Al escribir un código personalizado requiere un tiempo y puede ser propenso a errores. Ver también esta respuesta .