2016-04-25 1 views
0

würde Ich mag fragen, ob es einen Weg gibt, wie ständig auf meine Rails DB Datenbank von einer externen Quelle aktualisieren (alle 1 Stunde) ...Rails Aktualisierung DB ständig (externe Werte)

Ich habe versucht, um das zu tun, aber wenn ich das tue, wird meine DB dupliziert + neue Dateien hinzugefügt, also gibt es eine if Anweisung wo kann ich einfach neue Werte hinzufügen?

  • Ich ziehe DB (JSON) von BitBucket (Commits)
  • Dann, dass in meine Rails DB Ich spare und angesichts der Rückkehr.
  • Ich versuchte für diese Verwendung whenever gem.

bitbucket.rb

class Bitbucket < ActiveRecord::Base 
    def self.savedata 
    require 'bitbucket_rest_api' 
    bitbucket = BitBucket.new login:'...', password:'...' 
    repo = bitbucket.repos.commits.list '...', '...' 
    repo["values"].each do |r| 
     create(
     name: r["author"]["user"]["display_name"], 
     message: r["message"], 
     date: r["date"] 
    ) 
    end 
    end 
end 

muss ich Bitbucket.connection dann Bitbucket.savedata speichern in DB ersten in Rails-Konsole ausführen.

Vielen Dank für Rat und Hilfe.

Antwort

1

Also, wenn ich es richtig verstehe, möchten Sie Daten aus Bitbucket alle 1 Stunde ziehen, und aktualisieren Sie Ihre Datenbank nur mit neuen 'Werte'. In diesem Fall liegt es an Ihnen, ob Sie wissen, ob Sie bereits einen Eintrag in der Datenbank haben oder nicht.

Zum Beispiel könnten Sie fragen:

author_name = r["author"]["user"]["display_name"] 
message = r["message"] 
date = r["date"] 

unless exists?(name: author_name, message: message, date: date) 
    create(name: author_name, message: message, data: date) 
end 

Doku für 'existiert?': http://apidock.com/rails/ActiveRecord/Base/exists%3F/class

Alternativ könnten Sie 'first_or_create':

http://apidock.com/rails/v3.2.1/ActiveRecord/Relation/first_or_create

+0

Nice one! Wirklich zu schätzen wissen .. Code aktualisiert, so werde ich ein neues Commit erstellen und es testen .. – liborza

+0

Okay, es funktioniert super! Nochmals vielen Dank. – liborza