لماذا أشعل النار رمي هذه القضبان الهجرة الخطأ ؟

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

  •  04-07-2019
  •  | 
  •  

سؤال

لدي جهازين...تطوير آلة إنتاج آلة.عندما كنت أول من أحضر القضبان التطبيق على خادم الإنتاج, لم يكن لدي أي مشكلة.أنا ببساطة استيراد المخطط.rb طريق تشغيل أشعل النار db:المخطط:تحميل RAILS_ENV=الإنتاج.كان كل شيء جيدا.

إذن على تطوير آلة, أنا جعلت بعض التغييرات آخر الهجرة ثم نسخ التطبيق الجديد على إنتاج آلة.ثم حاول تحديث قاعدة البيانات عن طريق تشغيل أشعل النار db:ترحيل RAILS_ENV=الإنتاج.أحصل على الخطأ التالي:"يوجد بالفعل كائن اسمه 'schema_migrations' في قاعدة البيانات."

أنا أفكر في نفسي ، يا لا تمزح أشعل النار...قمت بإنشائه!ركضت أثر على الخليع ويبدو كما لو أشعل النار يعتقد أنه أول من أي وقت مضى ركض.ومع ذلك, من خلال تحليل بلدي 'schema_migrations' الجدول على الجهاز التطوير و الإنتاج آلة يمكنك أن ترى أن هناك فرق واحد الهجرة ، وهي تلك التي كنت تريد أن تهاجر.

كما أنني حاولت أن تحدد بوضوح رقم الإصدار, ولكن هذا لا يعمل ايضا.

أي الأفكار حول كيف يمكن أن أحمل بلدي خادم الإنتاج حتى الآن ؟

تحديث:

اسمحوا لي أن أبدأ بالقول أنني لا أستطيع فقط 'إسقاط' قاعدة البيانات.إنه خادم الإنتاج مع ما يزيد قليلا على 100 ألف سجلات بالفعل في ذلك.ماذا يحدث في حالة حدوث مشكلة مماثلة في المستقبل ؟ أنا فقط إسقاط الجدول في كل مرة قاعدة البيانات المشكلة?قد يعمل هذا الوقت, لكن هذا لا يبدو وكأنه عملية طويلة الأجل حل كل مشكلة في قاعدة بيانات.أشك المشكلة أواجه الآن هي فريدة من نوعها بالنسبة لي.

  1. يبدو مثل 'schema_info' جدول 'schema_migrations' الجدول هي نفسها.في الإعداد ، لدي فقط 'schema_migrations'.كما ذكر سابقا, الفرق بين 'schema_migrations' الجدول على خادم الإنتاج وتطوير الجهاز فقط سجل واحد.هو سجل يحتوي على رقم الإصدار من تغيير أريد أن تهاجر.

  2. من كتاب قرأت ، 'ببساطة القضبان 2' ، أنه عندما يتحرك أولا إلى خادم إنتاج بدلا من تشغيل أشعل النار db:الهجرة ، ينبغي للمرء أن مجرد تشغيل الخليع:db:المخطط:الحمل.

  3. إذا كان يهم, أنا باستخدام القضبان الإصدار 2.1.

لا يوجد حل صحيح

نصائح أخرى

هذا تخمين, أعترف:أعتقد أن هذا لأنك أول من ركض db:المخطط:تحميل بدلا من db:الهجرة في بيئة الإنتاج ، حصلت على هيكل db الخاص بك, ولكن ليس من البيانات التي تهاجر بملء في schema_info الجدول.حتى الآن عند تشغيل الهجرة في بيئة الإنتاج ، لا توجد بيانات في schema_info وهذا هو السبب في الهجرة وتعتقد أنها لم تعمل حتى الآن (لأنه لم).

إلى أن قال...كنت أقول أن كنت قد بحثت في "schema_migrations" الجدول ، أن هناك فرقا من إصدار واحد من ديف الإنتاج...لم أسمع من هذا الجدول, على الرغم من أنني بضعة أشهر خلف على القضبان الإصدار.ربما قد تتمكن من محاولة خلق "schema_info" الجدول في بيئة الإنتاج ، مع واحد "نسخة" عمود ، إضافة صف مع النسخة التي تؤمن بيئة الإنتاج على.

إذا كنت تحصل على "يوجد بالفعل كائن اسمه 'schema_migrations' في قاعدة البيانات." ظهور رسالة خطأ ثم أظن أن كنت تستخدم MS SQLServer الخاص بك قاعدة البيانات ؟ (كما أن هذا يبدو مثل MS SQL Server رسالة خطأ)

إذا كان الجواب نعم ثم الذي ActiveRecord قاعدة بيانات محول تستخدمه ؟ (ما هي قاعدة البيانات الخاصة بك.yml, ما الأحجار الكريمة لقد قمت بتثبيت للوصول إلى MS SQL Server قاعدة البيانات؟)

حاليا يبدو أن القضبان لا تجد schema_migrations الجدول في الإنتاج المخطط وبالتالي يحاول خلق هذا الخلق فشل مع رسالة خطأ في قاعدة البيانات.ربما السبب هو أعلى/أدنى حالة الأحرف في schema_migrations اسم الجدول - بقدر ما أفهم MS SQL Server المعرفات هي قضية حساسة.

اعتمادا على النظام المستخدم في الإنتاج ، لقد رأيت الحالات أدناه لا لا العمل:

rake db:migrate RAILS_ENV=production

ولكن أين هذا العمل:

RAILS_ENV=production rake db:migrate

ملتوي, أعرف, ولكن الامر يستحق محاولة لمعرفة ما إذا كان هناك فرق.

بخصوص التحديث:

  1. أنا لا أفهم ما الفرق بين الإنتاج الخاص schema_migrations و dev الإصدار.هناك سجل في كلا الجدولين (يجب أن يكون هناك فقط 1 عمود "الإصدار", صحيح) أو هل هناك سجل واحد في ديف ديسيبل صفر السجلات في الإنتاج ؟ إذا كان هناك صفر السجلات في إنتاج الجدول, ثم القيام بذلك:

    ActiveRecord::Base.connection.execute("INSERT schema_migrations (version) VALUES(#{my version number that production is supposedly on})")

  2. بدلا من ذلك, يمكنك أن تحاول اسقاط schema_migrations الجدول تماما على الإنتاج:

    ActiveRecord::Base.connection.execute("DROP TABLE schema_migrations")

    ثم إعادة تشغيل rake db:migrate RAILS_ENV=production.أنه سيتم تشغيل الهجرات بدءا من الإصدار 1 على الرغم مما هو ربما ليس ما كنت بعد.

  3. بدلا من ذلك بدلا من ذلك ، يمكن أن تبدأ IRB الدورة في بيئة الإنتاج ، لا إما "تتطلب" أو "تحميل" (لا أستطيع أبدا ، أو إذا كان يهم) من الهجرة الملف الذي تريد تحميله ، ومن ثم استدعاء MyMigrationClass.up.سوف تحتاج إلى تعيين يدويا رقم الإصدار في schema_migrations الجدول بعد أن كنت لا تزال لديها مشكلة تسير إلى الأمام, ولكن كما حل سريع النوع من الإختراق ، التي من شأنها العمل.

وأود أن مجرد إسقاط ديسيبل ، إضافة مرة أخرى وتشغيل أشعل النار rb:الهجرة.براد هو الصحيح عندما قمت بتشغيل مخطط الحمل, فإنه لم يضع أي سجلات في schema_migrations الجدول.

هذا هو أكثر تعقيدا بالطبع إذا كان هناك بيانات لا يمكن أن تخسر على خادم الإنتاج.هل يمكن الحصول على الخليع مهام النسخ الاحتياطي (لست متأكدا إذا كان هذا هو جزء من جوهر أو لا) ثم قم بتشغيل أشعل النار db:النسخ الاحتياطي:الكتابة على الإنتاج الخاص بك قاعدة البيانات ثم بعد الحصول على الهجرات حتى الآن على إنتاج تشغيل أشعل النار db:النسخ الاحتياطي:قراءة.

schema_info هو من نسخة قديمة من القضبان.schema_migrations هو طفل جديد على كتلة.يجب أن تكون قادرة على إزالة schema_info الجدول كما أنها لم تعد تستخدم.عليك ربما تريد البحث عن أي القضايا المرتبطة مع تغيير الاسم.

أشعل النار db:المخطط:تحميل تحميل هيكل قاعدة البيانات من المخطط.rb.هذا الملف هو التمثيل الحالي هيكل قاعدة البيانات.انها تستخدم عندما يكون لديك فارغة مخطط (قاعدة البيانات) التي يحتاج كل الجداول والفهارس خلق.فإنه يوفر لك الحاجة إلى تشغيل جميع الهجرات.إذا كان لديك الإنتاج القائمة قاعدة البيانات مع البيانات في, كنت لا ترغب في تشغيله.كما قال آخرون أنه سيكون سيئا!

أعرف أن هذا المنصب كان منذ بعض الوقت ، ولكن أنا تعثرت عبر هذا و لم يتم الرد عليها.كما أنه يأتي في جوجل ، يذهب هنا.

عندما كنت فعلت أشعل النار db:المخطط:تفريغ (أو عندما تم ذلك بالنسبة لك من خلال بناء البرامج النصية) سيكون لها وضع تعريف الهجرات الجدول المخطط.rb.في نهاية البرنامج النصي عملية محاولة إنشاء الجدول مرة أخرى ، ومع ذلك فإنه من الواضح أنه موجود بالفعل.فقط إزالة الهجرات الجدول من المخطط.rb قبل تشغيل الخليع:المخطط:تحميل و لن يكون هناك أي رسالة خطأ.

سوف تحتاج إلى تحديد رقم الإصدار في الهجرات الجدول ثم تشغيل الهجرات.لذا من المهم أن تعرف ما هو إصدار المخطط.rb تتعلق أيضا ، أو حذف كل الهجرات (انهم بأمان في المجلس الاعلى للقضاة الحق؟)

rake db:migrate RAILS_ENV=production

استخدام db:schema:load مهمة فقط من أجل إنشاء أول تغييرات تدريجية يجب أن يتم ترحيله.

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