2017-02-23 121 views
0

у меня есть реки задача следующего образом-rake как исправить неопределенную локальную переменную или ошибку метода?

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

Вчера эта задача рабочей, но я не знаю, почему она не работает сегодня. Я пытаюсь выполнить это с помощью приведенных ниже командно-

rake send_fetch_request 

Класс детали:

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 

Я получаю ниже ошибки:

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 

Вчера она работает нормально, Я не понимаю, почему сегодня рейк жалуется. Пожалуйста помоги.

+0

Очевидно, что FacebookCrawl неизвестен. Вы «требовали» файл, содержащий определение класса? – user1934428

+0

нет ,, Нужно ли использовать этот класс в грабли? Если да, то как? Я новичок в рельсах. Но вчера он работал хорошо. – RajSharma

+0

Какое местоположение FacebookCrawl? –

ответ

4

Пожалуйста, посмотрите внимательно на сообщении об ошибке:

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

Первое предложение является то, что вы получаете NameError для неопределенного локальных переменного или методы, а не постоянный. Вторая распродажа - это имя, на которое жалуется Ruby: он не жалуется на FacebookCrawl, он жалуется на   FacebookCrawl.

В Ruby, только символы Unicode U + 0020 КОСМИЧЕСКИЕ и U + 0009 ХАРАКТЕР ТАБУЛИРОВАНИЯ рассматриваются как пробелы. У вас есть два китайских U + 3000 IDEOGRAPHIC SPACE символов, которые Ruby просто рассматривает как часть имени, и поскольку они не являются прописными буквами, он обрабатывает это имя как локальную переменную или отправку сообщений.

Вероятно, вы должны включить видимые пробелы в своем редакторе, например. так выглядит ваш код в моем редакторе, что сразу становится очевидным, где проблема: text editor with visible spaces showing the offending characters in different highlighting

+0

Спасибо.Он работал после удаления этих белых пространств. Большое спасибо. – RajSharma

+0

Вы знаете, как сделать пробелы видимыми в редакторе Atom? – RajSharma

+1

Ну, вы видите, что это ** не ** представлено как пробел. Вы можете увидеть его, например, на скриншоте, который Jörg использовал для его отличного анализа: Линия, содержащая FacebookCrawl, содержит 6 серых точек, представляющих пробелы, а затем больше точек до «F» Facebook, поэтому из этого вы можете видеть, что там что-то среднее между которыми не является белым пространством в смысле Руби. Я не использую Atom прямо сейчас, но я был бы удивлен, если бы Atom не отображался существенно по-другому. – user1934428

-1

Скопируйте facebook_crawl.rb в app/services в папку & перезапустите сервер. Это ваша бизнес-логика, поэтому она должна быть в папке служб & не в моделях Так что создайте папку служб, а также в каталоге приложения.

+0

После этого мне нужно включить его в команду rake? Если да, то как? – RajSharma

+0

Нет, просто скопируйте файл в папку services и выполните свою команду rake –

+0

Я переместил ее в app/services/facebook_crawl.rb и перезапустил сервер. Еще одна ошибка. – RajSharma