Rails4: Как может Activerecord.find вернуть объект с другим идентификатором в один запрос?

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 Удаление некоторых неиспользованных драгоценных камней, таких как Далли, и удаление ограничения версии все, кроме нескольких случаев, чтобы разрешить обновление.
  2. бежать bundle update в результате чего много обновленных зависимости
  3. Меня использовали на заказ на заказ на Heroku (раздвоенный от официального Ruby One), я вытащил за последние несколько месяцев изменений вверх по течению.

Спасибо всем, кто читал и прокомментировал. Я предполагаю, что что -то было просто не так в моей жемчужной зависимости или окружающей среде Heroku.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top