Pergunta

Eu tenho um problema em que o ActiveRecord.Find está retornando linhas incorretas, mas apenas em produção. Aqui está algum código de amostra:

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

Quais saídas: (todos os atributos que não 'id' foram truncados para legibilidade)

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

Como o grupo.find (550058) pode produzir um recorde com o ID 265492?

Eu acredito que uma questão semelhante está acontecendo em alguns lugares. Parece acontecer quando o registro foi carregado recentemente (na amostra acima, o grupo é carregado anteriormente no controlador), por isso suspeito que o cache.

O código está funcionando bem no Rails3, no momento em que o Rails4 é implantado, esse problema acontece. Infelizmente, não consigo reproduzir o problema em nenhum ambiente de não produção (mesmo em um clone completo de produção em um host separado, apontando para o banco de dados de produção), portanto, possivelmente a carga do servidor é um fator que contribui.

Alguma ideia?

Foi útil?

Solução

Consegui resolver isso. Eu ainda não tenho idéia de como ou por que o exposto poderia ter acontecido (certamente m = Model.find(id); (id == m.id) sempre deve ser verdadeiro!), Embora eu ainda suspeite que o cache, pois parecia acontecer apenas se o cache estivesse preparado.

Eu fiz o seguinte, acredito que algo nessas etapas resolveu o problema:

  1. podado meu Gemfile Removendo algumas jóias não utilizadas como o Dalli e removendo a restrição da versão, exceto alguns casos para permitir a atualização.
  2. corre bundle update resultando em muitas dependências atualizadas
  3. Eu fui usado um BuildPack personalizado no Heroku (bifurcado do Ruby Office Of One), puxei nos últimos meses de mudanças a montante.

Obrigado a todos que leem e comentaram. Eu acho que algo estava errado em minhas dependências de jóias ou no ambiente Heroku.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top