2017-02-23 5 views
0

ich habe eine Harke Aufgabe als folgt-Rake, wie undefinierte lokale Variable oder Methodenfehler zu beheben?

desc 'send fetch request' 
    task send_fetch_request: :environment do 
      FacebookCrawl.new.process 
    end 

Gestern diese Aufgabe arbeiten, aber ich weiß nicht, warum es heute nicht arbeiten. Ich versuche, dies mit den unten command-

rake send_fetch_request 

Klasse Details auszuführen:

class FacebookCrawl 

    def initialize     
     fb_config = YAML.load_file(Rails.root.join("config/facebook_catalog.yml")) 
     @access_token = fb_config["facebook"]["access_token"] 
     @product_feed_ids = fb_config["facebook"]["product_feed_ids"] 
    end 

    def process 
     @product_feed_ids.each do |key,value| 
      feed_id = value["id"] 
      feed_url = value["feed_url"] 
      make_request(feed_id,feed_url,@access_token) 
     end 
    end 
end 

ich unten Störung erhalte:

rake send_fetch_request --trace 
    ** Invoke send_fetch_request (first_time) 
    ** Invoke environment (first_time) 
    ** Execute environment 
    ** Execute send_fetch_request 
    rake aborted! 
    NameError: undefined local variable or method `  FacebookCrawl' for main:Object 
    /Users/raj.sharma/Documents/Developer/Feed/lib/tasks/facebook_fetch_request_task.rake:3:in `block in <top (required)>' 
    /Users/raj.sharma/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/rake-12.0.0/lib/rake/task.rb:250:in `call' 
    /Users/raj.sharma/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/rake-12.0.0/lib/rake/task.rb:250:in `block in execute' 
    /Users/raj.sharma/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/rake-12.0.0/lib/rake/task.rb:250:in `each' 
    /Users/raj.sharma/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/rake-12.0.0/lib/rake/task.rb:250:in `execute' 
    /Users/raj.sharma/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/rake-12.0.0/lib/rake/task.rb:194:in `block in invoke_with_call_chain' 
    /Users/raj.sharma/.rbenv/versions/2.2.2/lib/ruby/2.2.0/monitor.rb:211:in `mon_synchronize' 
    /Users/raj.sharma/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/rake-12.0.0/lib/rake/task.rb:187:in `invoke_with_call_chain' 
    /Users/raj.sharma/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/rake-12.0.0/lib/rake/task.rb:180:in `invoke' 
    /Users/raj.sharma/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/rake-12.0.0/lib/rake/application.rb:152:in `invoke_task' 
    /Users/raj.sharma/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/rake-12.0.0/lib/rake/application.rb:108:in `block (2 levels) in top_level' 
    /Users/raj.sharma/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/rake-12.0.0/lib/rake/application.rb:108:in `each' 
    /Users/raj.sharma/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/rake-12.0.0/lib/rake/application.rb:108:in `block in top_level' 
    /Users/raj.sharma/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/rake-12.0.0/lib/rake/application.rb:117:in `run_with_threads' 
    /Users/raj.sharma/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/rake-12.0.0/lib/rake/application.rb:102:in `top_level' 
    /Users/raj.sharma/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/rake-12.0.0/lib/rake/application.rb:80:in `block in run' 
    /Users/raj.sharma/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/rake-12.0.0/lib/rake/application.rb:178:in `standard_exception_handling' 
    /Users/raj.sharma/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/rake-12.0.0/lib/rake/application.rb:77:in `run' 
    /Users/raj.sharma/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/rake-12.0.0/exe/rake:27:in `<top (required)>' 
    /Users/raj.sharma/.rbenv/versions/2.2.2/bin/rake:22:in `load' 
    /Users/raj.sharma/.rbenv/versions/2.2.2/bin/rake:22:in `<main>' 
    Tasks: TOP => send_fetch_request 

Gestern funktionierte gut, Ich weiß nicht, warum sich Rake heute beschwert. Bitte helfen Sie.

+0

Offensichtlich ist FacebookCrawl unbekannt. Haben Sie die Datei, die die Klassendefinition enthält, "benötigt"? – user1934428

+0

Nein ,, Muss ich diese Klasse in Rake verwenden müssen? Wenn ja wie? Ich bin neu in Schienen. Aber es hat gestern gut funktioniert. – RajSharma

+0

Wo befindet sich FacebookCrawl? –

Antwort

4

Bitte, schauen Sie genau auf die Fehlermeldung:

NameError: undefined local variable or method `  FacebookCrawl' for main:Object 
#     ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ ↑↑↑ 

Das erste Werbegeschenk ist, dass Sie eine NameError für einen nicht definierten lokale Variable oder Methode, und nicht für eine konstante bekommen. Das zweite Werbegeschenk ist der Name, über den sich Ruby beklagt: Es beklagt sich nicht über FacebookCrawl, es klagt über   FacebookCrawl.

In Ruby, werden nur die Unicode-Zeichen U + 0020 SPACE und U + 0009 CHARACTER AUFTABELLIERUNG werden als Leerzeichen behandelt. Sie haben zwei chinesische U + 3000 IDEOGRAPHIC SPACE Zeichen, die Ruby einfach als Teil des Namens behandelt, und da sie keine Großbuchstaben sind, behandelt sie den Namen als eine lokale Variable oder eine Nachricht senden.

Sie sollten wahrscheinlich sichtbare Leerzeichen in Ihrem Editor aktivieren, z. So sieht Ihr Code in meinem Editor aus, sodass sofort ersichtlich ist, wo das Problem liegt: text editor with visible spaces showing the offending characters in different highlighting

+0

Danke.Es funktionierte nach dem Entfernen dieser weißen Räume. Danke vielmals. – RajSharma

+0

Wissen Sie, wie Sie weiße Bereiche im Atomeditor sichtbar machen? – RajSharma

+1

Nun, Sie sehen es, dass es ** nicht ** als Leerzeichen dargestellt wird. Das sieht man zum Beispiel auf dem Screenshot, den Jörg für seine exzellente Analyse verwendet hat: Die Zeile mit FacebookCrawl enthält 6 graue Punkte, die Leerraum darstellen, und dann keine Punkte mehr bis zum "F" von Facebook, also davon kann man das dort sehen ist etwas dazwischen, das kein weißer Raum im Sinne von Ruby ist. Ich benutze Atom momentan nicht, aber ich wäre überrascht, wenn Atom sich nicht wesentlich anders darstellen würde. – user1934428

-1

Kopieren Sie die facebook_crawl.rb in app/services Ordner & starten Sie den Server neu. Dies ist Ihre Geschäftslogik, so sollte es in Services-Ordner & nicht in den Modellen sein So erstellen Sie einen Service-Ordner sowie im App-Verzeichnis.

+0

Danach muss ich es in Rake-Aufgabe aufnehmen? Wenn ja wie? – RajSharma

+0

Nein, kopieren Sie einfach die Datei in den Service-Ordner und führen Sie Ihre Rake-Aufgabe –

+0

Ich zog es nach app/services/facebook_crawl.rb und Server neu gestartet. Immer noch derselbe Fehler. – RajSharma

Verwandte Themen