Является ли Rails 3.1 Edge ломающим XmlMarkup :: Builder? - PullRequest
6 голосов
/ 10 мая 2011

В Интернете есть несколько примеров (например, http://techoctave.com/c7/posts/32-create-an-rss-feed-in-rails), показывающих, как создать красивый канал RSS с помощью Builder. Канонический шаблон выглядит примерно так:

xml.instruct! :xml, :version => "1.0" 
xml.rss :version => "2.0" do
xml.channel do
  xml.title "Your Blog Title"
  xml.description "A blog about software and chocolate"
  xml.link posts_url

  for post in @posts
    xml.item do
      xml.title post.title
      xml.description post.content
      xml.pubDate post.posted_at.to_s(:rfc822)
      xml.link post_url(post)
      xml.guid post_url(post)
    end
  end
end

Thisотлично работает в Rails 3.0.7. В Rails 3.1 Edge каждая команда производит ...

Rendered home/index.rss.builder (25.2ms)
Completed 500 Internal Server Error in 875ms

ActionView::Template::Error (wrong number of arguments (1 for 0)):
1: xml.instruct!(:xml, :encoding => "UTF-8")
2: 
3: xml.rss :version => "2.0" do
4:   xml.channel do
app/views/home/index.rss.builder:1:in   `_app_views_home_index_rss_builder___2123990471_2215695900'
app/controllers/home_controller.rb:17:in `index'
app/controllers/home_controller.rb:11:in `index'

Ответы [ 2 ]

6 голосов
/ 24 июня 2011

Rails 3.1.0.rc1 сломался для меня и с этой ошибкой, но только при использовании Ruby 1.8.7 - оказывается, это проблема с .instruct!

В качестве временного решения вы можете установить monkeypatch xchar.рб со следующим (как предложено автором этого поста http://lists.alioth.debian.org/pipermail/pkg-ruby-extras-maintainers/2010-June/005411.html):

--- /home/prahal/xmlbase.rb.orig  2010-06-03 11:18:38.000000000 +0200
+++ /home/prahal/xmlbase.rb.new 2010-06-03 11:18:53.000000000 +0200
@@ -131,7 +131,11 @@
       end
     else
       def _escape(text)
-        text.to_xs((@encoding != 'utf-8' or $KCODE != 'UTF8'))
+        begin
+   text.to_xs((@encoding != 'utf-8' or $KCODE != 'UTF8'))
+        rescue
+   text.to_xs()
+        end
       end
     end
3 голосов
/ 31 августа 2011

Вы также получите эту ошибку, если у вас установлены как Builder 3.0, так и fast_xs 0.8.0 (обратите внимание, что hpricot также включает fast_xs 0.8.0)

Вы можете обойти это с помощью следующего патча обезьяны в application.rb:

class String
  alias_method :orig_fast_xs, :fast_xs
  def fast_xs(ignore)
    orig_fast_xs
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...