Rails4: كيف يمكن لـ ActivereCord.find إرجاع كائن مع معرف مختلف عن الشخص الذي استفسر عنه؟

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

سؤال

لدي مشكلة حيث يعيد ActivereCord.find صفوفًا غير صحيحة ، ولكن فقط في الإنتاج. إليك بعض رمز النماذج:

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

ما المخرجات: (تم اقتطاع جميع السمات بخلاف "المعرف" لقدرة على القراءة)

    {"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 Gem أو بيئة Heroku.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top