Использование ERB в двигателе Ironruby
Вопрос
Я хотел бы использовать Ironruby с системой ERB для анализа файлов формата .erb и получить выход.
В Руби это было бы похоже на:
require "erb"
erbContent = "..."
return ERB.new(erbContent,0,"%<>").result
Но это просто не работает в моем проекте Ironruby. Я получаю исключение о том, что файл ERB отсутствует ... так что я думаю, что это проблема библиотек. Затем я инициировал свой рубиновый двигатель с путями к моим каталогам Ironruby, которые затем бросают другое исключение:
allocator undefined for System::String
Решение
У меня была аналогичная проблема, но я предоставил строку для сценария в качестве локальной переменной через область прицела. Локальная переменная была строкой .NET CLR, что вызвало проблему (Пожалуйста, посмотрите здесь).
Решением для меня было преобразование строки, передаваемой в erb.new в рубиновую строку с использованием to_s.
Вот пример (рубиновый фрагмент):
require 'erb'
template = ERB.new(template_code.to_s)
template.result(binding)
Часть C#, в которой приведены вышеуказанный сценарий:
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();
В приведенном выше фрагменте C# _BootStrapScript - это строка, которая содержит рубиновый фрагмент выше.