【问题标题】:Sidekiq worker undefined local variable or methodSidekiq worker 未定义的局部变量或方法
【发布时间】:2014-04-20 07:12:41
【问题描述】:

我正在尝试在我的应用中使用 Sidekiq,但由于某种原因,我收到了 undefined local variable or method "worker" for #<SolutionController:0xb55bc358>

我为 Sidekiq Web UI 安装了 sidekiq、sinatra 和 slim,但它没有注册任何内容。我现在确实在另一个终端窗口中运行了 sidekiq。

工人调用:

worker.perform_async(@user)

我的工人:

# app/workers/worker.rb

    class worker
    include Sidekiq::Worker
    sidekiq_options retry: false

    def perform(s_user)

        user = $client.user_timeline(s_user, exclude_replies: 1,include_rts: 1 ).take(10)
        user.each do |t|
        array_list   = $client.retweeters_of(t.id)
        end
        limited_list = array_list

        array = []
        hash  = {}

        limited_list.each do |g|

            hash = {:key => g.followers_count, :value => g.profile_image_url.to_s}
            array.push(hash)

        end

        array.sort_by! {|h| h[:key]}
        array.reverse!
        final = array.take(10)


    $redis.set("#{hash[:value]}", "#{hash[:value]}")
    end
end

谢谢

【问题讨论】:

    标签: ruby-on-rails-4 redis sidekiq


    【解决方案1】:

    我建议使用更具描述性的名称,并使用适当的大小写。尝试将类重命名为 MyWorker ,将文件重命名为 my_worker.rb 并调用 MyWorker.perform_async(@user)

    【讨论】:

    • 我认为这行得通,因为我没有那个错误了。但是,它现在在页面的相应视图中向我显示了一些未定义的局部变量方法。我现在如何访问工作人员内部的变量?
    • 你能提供更多关于你现在看到的信息吗?
    • 未定义的局部变量是由于活动记录类方法支持异步调用,但实例方法不支持。例如 user = User.find 1 如果你在 worker 中运行 user.do_something 它会说因为实例方法不支持异步,除非你执行 user.delay.do_something 参考:github.com/mperham/sidekiq/wiki/Delayed-extensions
    猜你喜欢
    • 2017-01-26
    • 2018-04-19
    • 2015-01-01
    • 2013-12-17
    • 2016-04-29
    • 2018-04-21
    相关资源
    最近更新 更多