Schienen4:Wie könnte ActiveRecord.find ein Objekt mit einer anderen ID als der abgefragten zurückgeben?

StackOverflow https://stackoverflow.com/questions/20353684

Frage

Ich habe ein Problem, bei dem ActiveRecord.find falsche Zeilen zurückgibt, jedoch nur in der Produktion.Hier ist ein Beispielcode:

    <% puts group_hash %>
    <% puts Group.find(group_hash['id'].to_i).inspect %>

was ausgibt:(Alle Attribute außer „id“ wurden zur besseren Lesbarkeit gekürzt)

    {"id"=>550058, ....}
    #<Group id: 265492, ...>

Wie kann Group.find(550058) einen Datensatz mit der ID 265492 liefern?

Ich glaube, dass an einigen Orten ein ähnliches Problem auftritt.Es scheint zu passieren, wenn der Datensatz kürzlich geladen wurde (im obigen Beispiel wurde die Gruppe zuvor in den Controller geladen), daher vermute ich den Cache.

Der Code lief unter Rails3 einwandfrei. Sobald Rails4 bereitgestellt wird, tritt dieses Problem auf.Leider kann ich das Problem in keiner Nicht-Produktionsumgebung reproduzieren (selbst auf einem vollständigen Klon der Produktion auf einem separaten Host, der auf die Produktionsdatenbank verweist), daher ist möglicherweise die Serverlast ein Faktor, der dazu beiträgt.

Irgendwelche Ideen?

War es hilfreich?

Lösung

Ich habe es geschafft, das Problem zu lösen.Ich habe immer noch keine Ahnung, wie oder warum das oben Genannte passieren konnte (sicherlich). m = Model.find(id); (id == m.id) sollte immer wahr sein!), obwohl ich immer noch den Cache vermute, da es nur dann zu passieren schien, wenn der Cache vorbereitet war.

Ich habe Folgendes getan. Ich glaube, dass das Problem durch diese Schritte gelöst wurde:

  1. habe meine beschnitten Gemfile Entfernen einiger ungenutzter Edelsteine ​​wie Dalli und Entfernen der Versionsbeschränkung bis auf wenige Fälle, um Aktualisierungen zu ermöglichen.
  2. laufen bundle update Dies führt zu vielen aktualisierten Abhängigkeiten
  3. Ich habe ein benutzerdefiniertes Buildpack für Heroku verwendet (abgespalten vom offiziellen Ruby-Buildpack), das ich in den letzten Monaten an Upstream-Änderungen vorgenommen habe.

Vielen Dank an alle, die gelesen und kommentiert haben.Ich vermute, dass in meinen Edelsteinabhängigkeiten oder meiner Heroku-Umgebung einfach etwas nicht stimmte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top