Использование ERB в движке IronRuby

Я хотел бы использовать IronRuby с системой ERB для анализа файлов формата .erb и получения результата.

В рубине это будет примерно так:

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

Но это просто не работает в моем проекте IronRuby. Я получаю исключение из-за отсутствия файла erb ... так что я предполагаю, что это проблема с библиотеками. Затем я инициировал свой движок Ruby с путями к моим каталогам IronRuby, который затем выдает другое исключение:

allocator undefined for System::String

person justacodemonkey    schedule 03.12.2011    source источник


Ответы (1)


У меня была аналогичная проблема, но я предоставлял строку скрипту как локальную переменную через область видимости. Локальной переменной была строка .NET CLR, которая и вызвала проблему (см. здесь).

Решением для меня было преобразовать строку, переданную в ERB.new, в строку Ruby с помощью to_s.

Вот пример (фрагмент Ruby):

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 - это строка, содержащая фрагмент Ruby, указанный выше.

person vassilvk    schedule 10.01.2012