RAILS4 : ACTIVERECORD.FIND는 어떻게 다른 ID를 가진 객체를 쿼리 한 것과 반환 할 수 있습니까?

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

문제

ActiveRecord.Find가 잘못된 행을 반환하지만 생산에서만 문제가 있습니다. 샘플 코드는 다음과 같습니다.

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

어떤 출력 : ( 'ID'이외의 모든 속성은 가독성을 위해 잘 렸습니다)

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

Group.Find (550058)는 어떻게 ID 265492로 레코드를 산출 할 수 있습니까?

나는 비슷한 문제가 몇 곳에서 일어나고 있다고 생각합니다. 레코드가 최근에로드 된 경우 (위의 샘플에서 그룹이 컨트롤러에 이전에로드 됨) 캐시를 의심합니다.

Rails3에서 코드가 정상으로 실행되었습니다. Rails4가 배치 되어이 문제가 발생합니다. 불행히도 비 생산 환경 (프로덕션 데이터베이스를 가리키는 별도의 호스트의 완전한 복제본에서도)에서 문제를 재현 할 수 없으므로 서버로드가 기여하는 요소 일 수 있습니다.

어떤 아이디어?

도움이 되었습니까?

해결책

나는 이것을 해결했다. 나는 아직도 위에서 위의 상황이 어떻게 또는 왜 일어날 수 있는지 전혀 모른다 (확실히 m = Model.find(id); (id == m.id) 캐시가 프라이밍 된 경우에만 발생하는 것처럼 보이기 때문에 캐시를 여전히 의심하지만 항상 사실이어야합니다!).

다음을 수행했습니다.이 단계에서 무언가가 문제를 해결했다고 생각합니다.

  1. 내 가지 치기 Gemfile Dalli와 같은 미사용 보석을 제거하고 버전 제약 조건을 제거하여 몇 가지 경우를 제외하고 업데이트를 허용합니다.
  2. 운영 bundle update 많은 업데이트 된 종속성이 발생합니다
  3. 나는 Heroku의 Custom Buildpack (공식 루비에서 포크)에 사용되었으며, 지난 몇 달 동안 업스트림 변경을 뽑았습니다.

읽고 댓글을 달린 모든 분들께 감사드립니다. 내 보석 의존성이나 헤로쿠 환경에서 무언가가 잘못되었다고 생각합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top