0

Heroku に、ウェブサイトから価格データを収集して定期的に保存するアプリがあります。何らかの理由で、rake タスクをローカルで実行すると期待どおりに動作しますが、heroku でタスクを実行すると、余分な出力が追加され、何らかの理由でオブジェクトが 2 回保存されます。

ローカルで実行したときの出力

a,12.80 saved at 2012-10-26 03:36:17 UTC.
b,38.03 saved at 2012-10-26 03:36:24 UTC.
c,22.38 saved at 2012-10-26 03:36:31 UTC.

herokuで実行したときの出力

a,12.80 saved at 2012-10-26 03:36:17 UTC.
b,38.03 saved at 2012-10-26 03:36:24 UTC.
c,22.38 saved at 2012-10-26 03:36:31 UTC.
#<Stock:0x000000047bb5e8>,12.80 saved at 2012-10-26 03:36:45 UTC.
#<Stock:0x000000047baaf8>,38.03 saved at 2012-10-26 03:36:48 UTC.
#<Stock:0x000000047b00a8>,22.38 saved at 2012-10-26 03:36:52 UTC.

コード

require 'open-uri'
require 'date'

namespace :data do 
  desc "import current blah stock price data to database"
  task :importblah => :environment do

  #pass in a stock and price and save it to the database
  def save_stock(stock, price)
    #store stock data in database
    p = stock.prices.build
    p.price = price
    p.datetime = Time.now.utc.to_datetime

    if p.save
      puts "#{stock.symbol},#{price} saved at #{p.datetime.to_s}."
    else
      puts "#{stock.symbol} didn't save."
    end
  end

  actives = Parent.where("test1 = ?", true)

  actives.each do |m|

    stocks = m.stocks.where('test2 = ?', false)
    stocks.each do |stock|
      if stock.title.start_with?('blah')
        #grab stock price data from blah.com
        url = "blah"+stock.symbol
        doc = Nokogiri::HTML(open(url))
        price = doc.at_css(".value").text[/\d+\.\d+/]
        save_stock(stock, price)
      end


    end
  end


  end
end

別のサイトでほぼ同じレーキ タスクを実行していますが、価格データが 2 回保存されていません。何かに影響する場合は、Amazon RDS db を使用しています。

4

1 に答える 1

1

ファイルをローカルで削除したが、忘れていたのはgit追跡の問題であることが判明しました

git rm oldraketask.rake

私が実行していたものと同じ名前の rake タスクがたまたま含まれていたため、heroku は両方の rake タスクを連続して実行していました。

于 2012-10-26T05:45:51.800 に答える