首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用tweetstream守护进程写入数据库

用tweetstream守护进程写入数据库
EN

Stack Overflow用户
提问于 2011-05-19 14:24:09
回答 3查看 1.8K关注 0票数 3

我正在尝试写所有与我的数据库匹配关键字的tweet。我已经在tracker.rb中设置了以下内容

代码语言:javascript
复制
require 'rubygems'
require 'tweetstream'

TweetStream::Daemon.new('Bill Gates','money','Twitter Tracker').track('ladygaga') do |status|
  Tweet.new(:content => status.text)
end

但什么都没发生。我在这里做错什么了?

提前感谢

更新:--我把所有东西都放进了一个名为twitter.rake.rake文件中,然后用$ rake scrap启动了恶魔

代码语言:javascript
复制
task :scrap => :environment do
  desc "Run Twitter Scraper"
  TweetStream::Client.new('TWITTER_USER','TWITTER_PASS').track('ladygaga') do |status|
    Tweet.create(:user_id  => status.user.id, :user_screen_name => status.user.screen_name, :user_profile_image_url => status.user.profile_image_url, :status_text => status.text, :status_id => status.id)
    puts "[#{status.user.screen_name}] #{status.text}"
  end
end
EN

回答 3

Stack Overflow用户

发布于 2013-01-08 17:45:05

你是怎么称呼守护进程的?

您需要提供一个命令(开始/停止.)

例如:

代码语言:javascript
复制
rails runner "TweetStream::Daemon.new('tracker').track('ladygaga') { |status| do_something }" start

这将在后台启动这项工作。

票数 1
EN

Stack Overflow用户

发布于 2013-09-25 19:04:54

第一种方法是最好的方法,您需要从命令行运行"deamon“,但是由于您希望使用rails和activerecord,所以需要将rails环境引导到脚本中。

你需要这样做:

代码语言:javascript
复制
#!/usr/bin/env ruby
# encoding: utf-8

ENV["RAILS_ENV"] ||= "development"

root  = File.expand_path(File.join(File.dirname(__FILE__), '..'))
require File.join(root, "config", "environment")

require 'tweetstream'

p "Initializing daemon..."

TweetStream.configure do |config|
  config.consumer_key       = 'your-consumer_key'
  config.consumer_secret    = 'your-consumer_secret'
  config.oauth_token        = 'your-oauth_token'
  config.oauth_token_secret = 'your-oauth_token_secret'
  config.auth_method        = :oauth
end

terms = ['ladygaga']

daemon = TweetStream::Daemon.new('tracker',
  :log_output => true,
  :backtrace  => true,
)

daemon.on_inited do
  ActiveRecord::Base.connection.reconnect!
  p "Listening..."
end

daemon.on_error do |message|
  puts "on_error: #{message}"
end

daemon.on_reconnect do |timeout, retries|
  puts "on_reconnect: #{timeout}, #{retries}"
end

daemon.on_limit do |discarded_count|
  puts "on_limit: #{skip_count}"
end

daemon.track(terms) do |status|
  # put here your model.create code!
  # Tweet.create!( :uid => status.id, ... )
end

要运行脚本,只需键入:

代码语言:javascript
复制
ruby scrip-name.rb run
票数 1
EN

Stack Overflow用户

发布于 2011-05-29 15:39:51

我假设这是一个更大的rails应用程序的一部分。如果是这样的话,问题1就是如果Tweet.new是一个标准的activerecord对象,它将不会将任何东西持久化到数据库。第二,我不确定脚本是否一定会知道Tweet是否是一个activerecord,而不需要使用rails应用程序,可能包括environment.rb文件。

类似于:

代码语言:javascript
复制
ENV["RAILS_ENV"] ||= "production"

require File.dirname(__FILE__) + "/../../config/application"
Rails.application.require_environment!

如果这样做不起作用,您可以尝试只包括活动记录,这里有一个问题和答案描述它:

How to use ActiveRecord in a ruby script outside Rails?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6060178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档