2011-02-24 34 views
0

我有一個raronfile,其中包含一個cron作業,它訪問我的一個模型,然後在我的數據庫上執行搜索。我包括我的環境和看到能夠創建我的對象,但是當我嘗試運行「發現」的方法,我得到這個錯誤:object.find在rakefile中失敗,即使我包含環境

rake aborted! 
undefined method `find' for #<Feeder:0x103611df0> 
/Library/Ruby/Gems/1.8/gems/activemodel-3.0.4/lib/active_model/attribute_methods.rb:364:in `method_missing' 
/Library/Ruby/Gems/1.8/gems/activerecord-3.0.4/lib/active_record/attribute_methods.rb:46:in `method_missing' 
/Users/josh.kerr/Documents/Projects/joshkerr.jekyll/Rakefile:28 
/Users/josh.kerr/Documents/Projects/joshkerr.jekyll/Rakefile:20:in `each' 
/Users/josh.kerr/Documents/Projects/joshkerr.jekyll/Rakefile:20 
/Users/josh.kerr/Documents/Projects/joshkerr.jekyll/Rakefile:18:in `each' 
/Users/josh.kerr/Documents/Projects/joshkerr.jekyll/Rakefile:18 
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:636:in `call' 
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:636:in `execute' 
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:631:in `each' 
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:631:in `execute' 
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:597:in `invoke_with_call_chain' 
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/monitor.rb:242:in `synchronize' 
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:590:in `invoke_with_call_chain' 
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:583:in `invoke' 
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2051:in `invoke_task' 
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `top_level' 
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `each' 
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `top_level' 
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling' 
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2023:in `top_level' 
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2001:in `run' 
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling' 
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:1998:in `run' 
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/bin/rake:31 
/usr/bin/rake:19:in `load' 
/usr/bin/rake:19 

下面是代碼:

require 'rails/all' 
require 'rake/clean' 
require File.expand_path('../config/application', __FILE__) 
require 'rubygems' 
require 'sqlite3' 

desc "This task is called by the Heroku cron add-on" 
task :cron => :environment do 
    puts "Running cron at #{Time.now.strftime('%Y/%m/%d %H:%M:%S')}..." 
    require 'app/models/feeder' 
    num_feeds = 10 
    feedurls = ["http://twitter.com/statuses/user_timeline/2205491.rss","http://github.com/joshkerr.atom","http://gdata.youtube.com/feeds/base/users/joshkerr/uploads","http://api.flickr.com/services/feeds/p[email protected]&lang=en-us&format=rss_200","http://www.google.com/reader/public/atom/user%2F00755727578217480286%2Fstate%2Fcom.google%2Fbroadcast"] 

    feedurls.each do |feed| 
    rawfeed = Feedzirra::Feed.fetch_and_parse(feed) 
    for i in 0..num_feeds do  
     # Database call 
     fed = Feeder.new 
     fed.title = rawfeed.entries[i].title 
     fed.published = rawfeed.entries[i].published 
     fed.url = rawfeed.entries[i].url 
     fed.feed_id = rawfeed.entries[i].entry_id   

     fed.find(1) # <- FAILS HERE!!! 
     #if not fed.Find(1) then 

      if fed.url.include? "twitter.com" then   
        fed.feed_service="twitter" 
      elsif fed.url.include? "github.com" then 
        fed.feed_service="github" 
      elsif fed.url.include? "flickr.com" then 
        fed.feed_service="flickr" 
      elsif fed.url.include? "youtube.com" then 
        fed.feed_service="youtube" 
      elsif fed.feed_id.include? "google.com" then 
        fed.feed_service="reader" 
      else 
       fed.feed_service = "reader" 
      end 

      fed.save  
     #end 
    end 
    end 

    puts "Done creating feed" 

    puts "done." 

end 

回答

1

findActiveRecord類中的方法,未在對象的實例上定義。因此,要找到ID爲1的Feeder,請致電Feeder.find(1)

我注意到的另一件事是這樣的:行task :cron => :environment意味着環境已經被加載 - 這包括rails/allrubygems(你使用Rails 3,使用捆紮機),sqlite3(假設它在你的Gemfile並且你運行了bundle install來生成你的Gemfile.lock和你所有的型號,嘗試刪除所有的requires行,看看你的rake任務是否仍然執行

+0

是的,這讓它工作。 – 2011-02-26 06:49:55