2012-04-03 5 views
1

Ich verwende eine Kombination von omniauth und delayed_job mit Facebook zu integrieren. Ich habe ein Authentication Modell, das ein wenig wie folgt aussieht:Ruby on Rails fb_graph Fehler mit undefinierter Methode bytesize bei Ausführung von delayed_job

class Authentication < ActiveRecord::Base 

    def account 
    @account ||= FbGraph::User.me(token) 
    end 

    def post_to!(opts = {}) 
    account.feed!(opts) 
    end 

end 

So dann von der Konsole kann ich so etwas tun:

auth.post_to :message => 'Foo bar', :link => 'http://google.com' 

... und alles funktioniert perfekt und ein Update Auf meinen Facebook-Feed gepostet.

jedoch in der Anwendung ich einen benutzerdefinierten verzögert Job erstellt habe, die genau die oben tut, nur nicht jedes Mal mit dem folgenden Fehler-Stack:

undefined method `bytesize'' for nil:NilClass 
    /Users/aaron/.rvm/gems/[email protected]/gems/activesupport-3.1.3/lib/active_support/whiny_nil.rb:48:in `method_missing'' 
    /Users/aaron/.rvm/gems/[email protected]/gems/httpclient-2.2.4/lib/httpclient/http.rb:830:in `block in escape'' 
    /Users/aaron/.rvm/gems/[email protected]/gems/activesupport-3.1.3/lib/active_support/core_ext/string/output_safety.rb:142:in `gsub'' 
    /Users/aaron/.rvm/gems/[email protected]/gems/activesupport-3.1.3/lib/active_support/core_ext/string/output_safety.rb:142:in `gsub'' 
    /Users/aaron/.rvm/gems/[email protected]/gems/httpclient-2.2.4/lib/httpclient/http.rb:829:in `escape'' 
    /Users/aaron/.rvm/gems/[email protected]/gems/httpclient-2.2.4/lib/httpclient/http.rb:822:in `block in escape_query'' 
    /Users/aaron/.rvm/gems/[email protected]/gems/httpclient-2.2.4/lib/httpclient/http.rb:818:in `each'' 
    /Users/aaron/.rvm/gems/[email protected]/gems/httpclient-2.2.4/lib/httpclient/http.rb:818:in `collect'' 
    /Users/aaron/.rvm/gems/[email protected]/gems/httpclient-2.2.4/lib/httpclient/http.rb:818:in `escape_query'' 
    /Users/aaron/.rvm/gems/[email protected]/gems/httpclient-2.2.4/lib/httpclient/http.rb:809:in `create_query_part_str'' 
    /Users/aaron/.rvm/gems/[email protected]/gems/httpclient-2.2.4/lib/httpclient/http.rb:538:in `set_content'' 
    /Users/aaron/.rvm/gems/[email protected]/gems/httpclient-2.2.4/lib/httpclient/http.rb:447:in `init_request'' 
    /Users/aaron/.rvm/gems/[email protected]/gems/httpclient-2.2.4/lib/httpclient/http.rb:705:in `new_request'' 
    /Users/aaron/.rvm/gems/[email protected]/gems/httpclient-2.2.4/lib/httpclient.rb:997:in `create_request'' 
    /Users/aaron/.rvm/gems/[email protected]/gems/httpclient-2.2.4/lib/httpclient.rb:866:in `do_request'' 
    /Users/aaron/.rvm/gems/[email protected]/gems/httpclient-2.2.4/lib/httpclient.rb:756:in `request'' 
    /Users/aaron/.rvm/gems/[email protected]/gems/httpclient-2.2.4/lib/httpclient.rb:666:in `post'' 
    /Users/aaron/.rvm/gems/[email protected]/gems/fb_graph-2.4.7/lib/fb_graph/node.rb:55:in `block in post'' 
    /Users/aaron/.rvm/gems/[email protected]/gems/fb_graph-2.4.7/lib/fb_graph/node.rb:122:in `handle_response'' 
    /Users/aaron/.rvm/gems/[email protected]/gems/fb_graph-2.4.7/lib/fb_graph/node.rb:54:in `post'' 
    /Users/aaron/.rvm/gems/[email protected]/gems/fb_graph-2.4.7/lib/fb_graph/connections/feed.rb:15:in `feed!'' 
    /Users/aaron/Sites/bb/app/models/authentication.rb:40:in `post_to!'' 
    /Users/aaron/Sites/bb/lib/share_activity_job.rb:39:in `block in perform'' 
    /Users/aaron/Sites/bb/lib/share_activity_job.rb:11:in `each'' 
    /Users/aaron/Sites/bb/lib/share_activity_job.rb:11:in `perform'' 

ich offiziell auf den Punkt bekommen habe, wo ich anfangen teure Computer aus dem Fenster werfen. Kann jemand irgendeinen Einblick geben, warum es scheitert, warum es funktioniert, wenn es von der Konsole aus ausgeführt wird, aber scheitert, wenn es von einem benutzerdefinierten delayed_job ausgeführt wird?

Jede Hilfe wird sehr geschätzt. Vielen Dank.

+0

ich das gleiche Problem mit bin. Hast du schon eine Antwort gefunden, als du gepostet hast? –

Antwort

1

Die Lösung ist einfach. Sie haben to_str in Ihrem Code zu verwenden:

auth.post_to message: message.to_str, link: 'http://google.com' 
+0

es scheint albern, aber das löst definitiv das Problem – Jimmy