Pregunta

Me gustaría usar IronRuby con el sistema ERB para analizar archivos de formato .erb y obtener la salida.

En Ruby esto sería como:

require "erb"
erbContent = "..."
return ERB.new(erbContent,0,"%<>").result

Pero esto simplemente no funciona en mi proyecto Ironruby. Tengo una excepción sobre el archivo ERB que falta ... así que supongo que este es un problema de bibliotecas. Luego inicié mi motor Ruby con los caminos a mis directorios de Ironruby, que luego arroja una excepción diferente:

allocator undefined for System::String
¿Fue útil?

Solución

Tuve un problema similar, pero estaba proporcionando la cadena al script como una variable local a través de un alcance. La variable local fue una cadena CLR .NET, que es lo que causó el problema (Por favor vea aquí).

La solución para mí era convertir la cadena pasada a Erb.Nnew a una cadena Ruby usando TO_S.

Aquí hay un ejemplo (fragmento de rubí):

require 'erb'

template = ERB.new(template_code.to_s)
template.result(binding)

La parte C# que invocó el script anterior:

var scriptEngine = Ruby.CreateEngine();
var templateCode = "my ERB template code goes here";
// Pass the template code to the Ruby script through a scope
var scope = _scriptEngine.CreateScope(new Dictionary<string, object>() 
                                                  { 
                                                    {"template_code", templateCode}
                                                  });

var result scriptEngine.Execute(_boostrapScript, scope).ToString();

En el fragmento de C# anterior, _bootstraPScript hay una cadena que contiene el fragmento de rubí arriba.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top