Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 无法使用单独的TwitterStream实例跟踪多个关键字_Ruby On Rails_Ruby_Twitter_Sidekiq - Fatal编程技术网

Ruby on rails 无法使用单独的TwitterStream实例跟踪多个关键字

Ruby on rails 无法使用单独的TwitterStream实例跟踪多个关键字,ruby-on-rails,ruby,twitter,sidekiq,Ruby On Rails,Ruby,Twitter,Sidekiq,我正在尝试运行多个客户端并跟踪关键字,每个客户端都有不同的access/oauth令牌(在不同的Twitter帐户上创建)。我正在使用sidekiq启动每个TweetStream::Client实例 我希望如此,因为我应该能够开始每个sidekiq工作,并分别跟踪每个关键字。然而,我发现,只要第一个TweetStream::Client连接并跟踪,在该点之后初始化的任何客户端都会立即在sidekiq中“处理”或完成,并且不会跟踪关键字 def perform(app_id) app

我正在尝试运行多个客户端并跟踪关键字,每个客户端都有不同的access/oauth令牌(在不同的Twitter帐户上创建)。我正在使用sidekiq启动每个
TweetStream::Client
实例

我希望如此,因为我应该能够开始每个sidekiq工作,并分别跟踪每个关键字。然而,我发现,只要第一个
TweetStream::Client
连接并跟踪,在该点之后初始化的任何客户端都会立即在sidekiq中“处理”或完成,并且不会跟踪关键字

def perform(app_id)    
  app = App.get(app_id)
  client = prepare_twitter_client(app)
  stream_tweets("google", app_id, client)
end

def prepare_twitter_client(app)
    # Use the companies twitter app token to connect to the stream
    @twitter_client = nil
    @twitter_client = TweetStream::Client.new
    @twitter_client.consumer_key               = app.tw_consumer_key
    @twitter_client.consumer_secret            = app.tw_consumer_secret
    @twitter_client.oauth_token                = app.tw_oauth_token
    @twitter_client.oauth_token_secret         = app.tw_oauth_secret
    @twitter_client.auth_method                = :oauth
    return @twitter_client
end


def stream_tweets(company_domain, app_id, twitter_client)
    twitter_client.on_error do |message|
    end.track(company_domain) do |status|
        logger.info "Tweet found that match the criteria.  #{status.text}"
        create_new_impression(status, app_id)
    end
end
我怀疑TweetStream在创建单独的实例和跟踪来自多个客户端的关键字时遇到问题。

已解决

TweetStream
似乎不是线程安全的。尽管我会为每个sidekiq作业实例重新创建一个新的
TwitterStream::Client
,甚至拥有不同的Twitter帐户/应用程序,但我无法同时运行多个作业

我将TweetStream替换为,它工作得非常好