2016-01-20 40 views
1

我試圖讓rake任務從JSON API fixer.io, 填充數據庫,但是當我型我耙:
耙分貝:填充
此錯誤發生:Rails的填充分貝rake任務OpenURI :: HTTPError:500內部服務器錯誤

OpenURI::HTTPError: 500 Internal Server Error 
/home/jakub/Documents/workspace/exch/lib/tasks/populate.rake:16:in `block (5 levels) in <top (required)>' 
/home/jakub/Documents/workspace/exch/lib/tasks/populate.rake:13:in `block (4 levels) in <top (required)>' 
/home/jakub/Documents/workspace/exch/lib/tasks/populate.rake:12:in `each' 
/home/jakub/Documents/workspace/exch/lib/tasks/populate.rake:12:in `block (3 levels) in <top (required)>' 
/home/jakub/Documents/workspace/exch/lib/tasks/populate.rake:11:in `each' 
/home/jakub/Documents/workspace/exch/lib/tasks/populate.rake:11:in `block (2 levels) in <top (required)>' 
Tasks: TOP => db:populate 
(See full trace by running task with --trace) 

這是LIB /我的任務rake任務(populate.rake):

require 'open-uri' 

namespace :db do 
    desc "Erase and fill database" 
    task :populate => :environment do 
    require 'populator' 

    [ConversionRate].each(&:delete_all) 
    n = JSON.load(open('http://api.fixer.io/latest'))["rates"].keys.count 
    currencies = JSON.load(open('http://api.fixer.io/latest'))["rates"].keys 
    currencies.each do |curr1| 
     currencies.each do |curr2| 
     ConversionRate.populate 1 do |cr| 
      cr.currency1 = curr1 
      cr.currency2 = curr2 
      cr.conversion_rate = JSON.load(open('http://api.fixer.io/latest?base=' + curr1))["rates"][curr2] 
     end 
    end 
    end 
    end 
end 

請幫助我,我不知道是什麼原因導致這個PROBL EM。

回答

1

主要的問題是在這裏,你是不是服用"rates"

currencies = JSON.load(open('http://api.fixer.io/latest')).keys 

currencies = JSON.load(open('http://api.fixer.io/latest'))["rates"].keys 

require 'open-uri' 

namespace :db do 
    desc "Erase and fill database" 
    task :populate => :environment do 
    require 'populator' 

    [ConversionRate].each(&:delete_all) 

    latest_data = JSON.load(open('http://api.fixer.io/latest')) 

    currencies = latest_data["rates"].keys 
    n = currencies.count 

    currencies.each do |curr1| 
     currencies.each do |curr2| 
     ConversionRate.populate 1 do |cr| 
      #take care of any error, as we are going to call third party api here 
      begin 
      cr.currency1 = curr1 
      cr.currency2 = curr2 
      cr.conversion_rate = JSON.load(open('http://api.fixer.io/latest?base=' + curr1))["rates"][curr2] 
      rescue => e 
      puts "error #{e}" 
      end 
     end 
     end 
     #give a bit rest 
     sleep 2 
    end 
    end 
end 
+0

呀鍵,我發現缺少鍵:d –

+0

好,然後打接受的答案:) –

+0

但同樣的錯誤仍然發生......我想我對這個API提出了太多的要求?有沒有辦法解決這個問題?它不顯示這個錯誤,只有當我使這個循環像'貨幣[0..2] .each'一樣小時, –