2017-02-23 1 views
0

은 내가 follows-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은 알 수 없습니다. 클래스 정의가 들어있는 파일을'require' 했습니까? – user1934428

+0

아니요, 레이크에서 해당 클래스를 사용해야합니다. 그렇다면 어떻게? 나는 레일을 처음 사용합니다. 하지만 어제는 괜찮 았어. – RajSharma

+0

FacebookCrawl의 위치는 무엇입니까? –

답변

4

, 오류 메시지에주의 깊게 살펴주십시오

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

첫 번째 공짜는 상수에 대한 정의되지 않은 지역 변수 또는 메소드에 대한 NameError를 얻을 수 있다는 것입니다, 그리고. 두 번째 선물은 Ruby가 불평하는 이름입니다. FacebookCrawl에 대해 불평하지 않으며 약   FacebookCrawl에 불평합니다. 루비에서

만 유니 코드 문자 U + 0020 SPACEU + 0009 CHARACTER 집계은 공백으로 처리됩니다. Ruby가 단순히 이름의 일부로 취급하는 두 개의 중국어 U + 3000 IDEOGRAPHIC SPACE 문자가 있으며 대문자가 아니기 때문에 이름을 로컬 변수 또는 메시지 전송으로 처리합니다.

아마도 편집기에서 보이는 공백을 켜야합니다. 이 코드는 내 편집기에서 코드가 어떻게 보이는지를 보여 주므로 문제가있는 곳에서 즉각적으로 알 수 있습니다. text editor with visible spaces showing the offending characters in different highlighting

+0

감사합니다.이러한 공백을 제거한 후에 작동합니다. 고마워. – RajSharma

+0

Atom 편집기에서 공백을 표시하는 방법을 알고 있습니까? – RajSharma

+1

글쎄, 당신은 공백으로 표시되지 않는다는 점에서 볼 수있다. Jörg가 그의 탁월한 분석을 위해 사용한 스크린 샷에서 볼 수 있습니다 : FacebookCrawl가 포함 된 줄에는 여백을 나타내는 6 개의 회색 점과 Facebook의 "F"까지 점들이 더 이상 표시되지 않으므로 거기에서 볼 수 있습니다 그 사이에 Ruby라는 의미에서 공백이 아닌 뭔가가 있습니다. 나는 Atom을 지금 사용하지 않지만, Atom이 현저히 다른 방식으로 표시하지 않는다면 놀랄 것입니다. – user1934428

-1

app/services 폴더에 복사하십시오. & 서버를 다시 시작하십시오. 이것은 비즈니스 논리이므로 모델 에없는 & 서비스 폴더에 있어야합니다. 따라서 서비스 디렉토리도 app 디렉토리에 만드십시오.

+0

그런 후 레이크 작업에 포함시켜야합니까? 그렇다면 어떻게? – RajSharma

+0

아니요, 서비스 폴더에있는 파일을 복사하고 레이크 작업을 실행하십시오. –

+0

app/services/facebook_crawl.rb로 이동하고 서버를 다시 시작했습니다. 여전히 같은 오류. – RajSharma

관련 문제