[LRUG] Rails 2.2 Haml filter problem - production only

Tom Ward tom at popdog.net
Wed Nov 19 05:31:11 PST 2008


Just a stab in the dark, but it might have something to do with class
pre-loading (http://github.com/rails/rails/commit/3bd34b6ffe017dd81fd26743aab052fc4324eb0f).

You could try requiring your smarty_pants file at the start of your
environment.rb rather than the end and see if that helps.

Tom

2008/11/19 Andrew Stewart <boss at airbladesoftware.com>:
> Morning El Rug,
>
> I have a custom Haml filter in my Rails 2.2 app which works when I run the
> app in development but not in production.
>
> This did work in production before I upgraded from Rails 2.1 to 2.2.  I
> presume that Rails changed the way it loads, er, stuff in production between
> 2.1 and 2.2.  Does anybody know what this might be?  (I asked the Haml list
> but they weren't sure.)
>
> I'm using Haml 2.0.4 and Rails 2.2.1.
>
> Here's what I see when I try to fire up the app in production:
>
> ** Starting Mongrel listening at 0.0.0.0:3000
> ** Starting Rails with production environment...
> /path/to/my/app/views/comments/_comment.html.haml:6: Filter "smartypants" is
> not defined. (Haml::Error)
>        from
> /usr/local/lib/ruby/gems/1.8/gems/haml-2.0.4/lib/haml/precompiler.rb:711:in
> `start_filtered'
>        from
> /usr/local/lib/ruby/gems/1.8/gems/haml-2.0.4/lib/haml/precompiler.rb:217:in
> `process_line'
>        from
> /usr/local/lib/ruby/gems/1.8/gems/haml-2.0.4/lib/haml/precompiler.rb:152:in
> `precompile'
>        from
> /usr/local/lib/ruby/gems/1.8/gems/activesupport-2.2.1/lib/active_support/dependencies.rb:144:in
> `each_with_index'
>        from
> /usr/local/lib/ruby/gems/1.8/gems/haml-2.0.4/lib/haml/precompiler.rb:118:in
> `each'
>        from
> /usr/local/lib/ruby/gems/1.8/gems/haml-2.0.4/lib/haml/precompiler.rb:118:in
> `each_with_index'
>        from
> /usr/local/lib/ruby/gems/1.8/gems/haml-2.0.4/lib/haml/precompiler.rb:118:in
> `precompile'
>        from
> /usr/local/lib/ruby/gems/1.8/gems/haml-2.0.4/lib/haml/engine.rb:100:in
> `initialize'
>         ... 35 levels...
>        from
> /usr/local/lib/ruby/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel/command.rb:212:in
> `run'
>        from
> /usr/local/lib/ruby/gems/1.8/gems/mongrel-1.1.5/bin/mongrel_rails:281
>        from /usr/local/bin/mongrel_rails:19:in `load'
>        from /usr/local/bin/mongrel_rails:19
>
> My filter code looks like this:
>
> lib/smarty_pants.rb:
>
>  module Haml
>    module Filters
>
>      # Forces RDiscount to process with Smarty Pants.
>      module SmartyPants
>        include ::Haml::Filters::Base
>        lazy_require 'rdiscount'
>
>        def render(text)
>          ::RDiscount.new(text, :smart).to_html
>        end
>      end
>    end
>  end
>
> And I load it with this line at the end of my config/environment.rb:
>
>  require 'smarty_pants'
>
> I use it in my views, such as the one mentioned in the stacktrace, like
> this:
>
> app/views/comments/_comment.html.haml:
>
>  %div[comment]
>    %h3== #{link_to comment.member.first_name, comment.member} said
> #{time_ago_in_words comment.created_at} ago
>
>    = image_tag comment.member.portrait.url(:thumb), :class => 'member'
>
>    :smartypants
>      #{comment.body}
>
> Thanks in advance.
>
> Cheers,
> Andy Stewart
>
> -------
> http://airbladesoftware.com
>
>
> _______________________________________________
> Chat mailing list
> Chat at lists.lrug.org
> http://lists.lrug.org/listinfo.cgi/chat-lrug.org
>



More information about the Chat mailing list