1

我有一个 ruby​​ on rails 应用程序,我需要在其中运行一个 rake 任务,该任务将访问 twitterstream api 并将来自某个位置的推文插入数据库。为此,我创建了一个名为 uncat_tweets 的表。我的 rake 任务看起来像这样

task :get_uncat_tweets => :environment do
  TweetStream.configure do |c|
    ...
    ...
  end

  puts "#{UncatTweets.count}

  client = TweetStream::Client.new()
  client.locations(coordinates) do |status|
    puts "#{status.text}"
    t = UncatTweets.new()
    t.text = status.text
    t.long = ...
    t.lat = ...
    t.time = ....
    t.save!
  end

我的 uncat_tweets 模型如下所示:

class UncatTweets < ActiveRecord::Base
  attr_accessible :lat, :long, :text, :time, :user
end

当我运行 rake get_uncat_tweets 时,tweetstream 工作并喷出推文。但是 rake 任务并没有推送到数据库。线路puts "#{UncatTweets.count}"返回。我去了 Rails 控制台并尝试插入 UncatTweets 的虚拟值,它成功了!但是当我运行 rake 任务时,程序没有错误地继续执行,但永远不会推送到数据库中。这里发生了什么事?我无法找到解决此问题的方法。请帮我

4

1 回答 1

0

假设这是 Rails 3,您应该遵循 Rails 3 的方法来执行此操作。

db/seeds.rb首先,在 Rails 应用程序中打开。像这样设置它(基于您上面的 rake 任务):

TweetStream.configure do |c|
  ...
  ...
end

puts "Number of tweets: #{UncatTweets.count}"

client = TweetStream::Client.new()

# Note you will have to define the following variable "coordinates" somewhere
client.locations(coordinates) do |status|
  UncatTweets.create(:text => status.text, :long => ..., :lat => ..., :time => ...)
end

然后通过做运行它rake db:seed

于 2012-11-01T22:27:20.740 回答