Rake Task不插入数据库

时间:2012-11-01 18:22:49

标签: ruby-on-rails sqlite rake-task

我在rails应用程序上有一个ruby,我需要运行一个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任务时,程序会毫无错误地继续运行但从不会进入数据库。这里发生了什么事?我无法找到解决此问题的方法。 请帮帮我

1 个答案:

答案 0 :(得分:0)

假设这是Rails 3,你应该遵循Rails 3方法来做到这一点。

首先,在您的Rails应用中打开db/seeds.rb。像这样设置它(基于你上面的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

运行它