Domanda

Ho un problema in cui ActiveRecord.Find sta restituendo file errate, ma solo in produzione. Ecco un codice di esempio:

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

quali output: (tutti gli attributi diversi da "ID" sono stati troncati per la leggibilità)

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

Come può Group.Find (550058) produrre un record con l'ID 265492?

Credo che un problema simile stia accadendo in alcuni luoghi. Sembra accadere quando il record è stato caricato di recente (nel campione sopra, il gruppo viene caricato in precedenza nel controller), quindi sospetto che la cache.

Il codice è andato bene sotto Rails3, il momento in cui Rails4 è distribuito, questo problema si verifica. Sfortunatamente non riesco a riprodurre il problema in nessun ambienti di non produzione (anche su un clone di produzione completo su un host separato, puntando al database di produzione), quindi probabilmente il carico del server è un fattore che contribuisce.

Qualche idea?

È stato utile?

Soluzione

Sono riuscito a risolverlo. Non ho ancora idea di come o perché quanto sopra potrebbe accadere (sicuramente m = Model.find(id); (id == m.id) Dovrebbe essere sempre vero!), Anche se sospetto ancora la cache, poiché sembrava accadere solo se la cache fosse innescata.

Ho fatto quanto segue, credo che qualcosa in questi passaggi abbia risolto il problema:

  1. potato il mio Gemfile Rimozione di alcune gemme inutilizzate come Dalli e rimuovere il vincolo della versione, tranne pochi casi per consentire l'aggiornamento.
  2. correre bundle update risultando in molte dipendenze aggiornate
  3. Sono stato usato un buildpack personalizzato su Heroku (biforcuto da quello ufficiale di Ruby), ho tirato gli ultimi mesi di cambi a monte.

Grazie a tutti coloro che hanno letto e commentato. Immagino che qualcosa non andasse solo nelle mie dipendenze GEM o dall'ambiente Heroku.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top