Можете ли вы попытаться вернуть haml.rb в состояние, в котором он был до фиксации 45db6fe0696dfac7deeebba42c62c6bcca8bab10 на вашем Ramaze? Это исправило ошибку в моем приложении.
Я предполагаю, что ошибка вызвана этим:
Новый haml.rb, вызывающий ошибку:
haml = View.compile(string) do |s|
::Haml::Engine.new(s,options).render_proc(action.instance,*action.variables.keys)
end
Возвращаемое значение render_proc
кэшируется. Используемый ключ, AFAIK, контрольная сумма необработанного макета Haml. Проблема в том, что render_proc
связывается здесь с action.instance, где хранится @content
.
Это означает, что каждый раз, когда мы рендерим страницу, используя один и тот же макет (и, следовательно, один и тот же ключ кэша), мы используем один и тот же action.instance
, который мы использовали при рендеринге первой страницы. В результате мы всегда получаем один и тот же макет, заполненный одинаковыми переменными экземпляра.
Я думаю, что человек, который сделал этот патч, предполагал, что люди использовали локальные переменные (content
) в своем макете вместо переменных экземпляра (@content
). В самом деле, если в макете вместо @content
используется content
, ошибка, похоже, исчезнет.