耙如何修复未定义的局部变量或方法错误? [英] rake how to fix undefined local variable or method error?

查看:128
本文介绍了耙如何修复未定义的局部变量或方法错误?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个耙任务,如下所示:

i have a rake task as follows-

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

昨天该任务正常运行,但是我不知道为什么今天不起作用。
我正在尝试使用以下命令执行此操作-

Yesterday this task working, but I don't know why it is not working today. I am trying to execute this with the below command-

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

昨天情况很好,我不知道为什么耙子今天会抱怨。请帮忙。

Yesterday it was working fine, I don't why rake is complaining today. Please help.

推荐答案

请仔细查看错误消息:

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

第一个赠品是您得到 NameError 用于未定义的局部变量或方法,而不用于常量。第二个赠品是Ruby抱怨的名字:它没有抱怨 FacebookCrawl ,它抱怨了 FacebookCrawl

The first giveaway is that you get a NameError for an undefined local variable or method, and not for a constant. The second giveaway is the name that Ruby complains about: it doesn't complain about FacebookCrawl, it complains about   FacebookCrawl.

在Ruby中,只有Unicode字符 U + 0020 SPACE U + 0009 CHARACTER TABULATION 被视为空白。您有两个中文 U + 3000 IDEOGRAPHIC SPACE 字符,Ruby只是将其视为名称的一部分,并且由于它们不是大写字符,因此会将名称视为本地变量或消息发送。

In Ruby, only the Unicode characters U+0020 SPACE and U+0009 CHARACTER TABULATION are treated as whitespace. You have two Chinese U+3000 IDEOGRAPHIC SPACE characters, which Ruby simply treats as part of the name, and since they are not uppercase characters, it treats the name as a local variable or message send.

您可能应该在编辑器中打开可见的空格,例如这就是您的代码在我的编辑器中的显示方式,使问题出在哪里就变得显而易见:

You should probably turn on visible whitespace in your editor, e.g. this is how your code looks in my editor, making it immediately obvious where the problem is:

这篇关于耙如何修复未定义的局部变量或方法错误?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆