2013-02-23 28 views
9

मैं schema.rb से मेरे सभी तालिकाओंरेल शुरू करने के बिना schema.rb से डेटाबेस कैसे बनाएँ? ,</p> <p>हालांकि यह विफल क्योंकि मेरे initializers में से एक में, यह एक संदर्भित कर रहा है "लोड रेक db:: स्कीमा"

मैं कमांड इस्तेमाल किया बनाने के लिए कोशिश कर रहा हूँ मॉडल/टेबल जो स्पष्ट रूप से मौजूद नहीं है (चूंकि डेटाबेस खाली है)

मैं इन पंक्तियों पर टिप्पणी कर सकता हूं, और फिर स्कीमा चला सकता हूं: फिर से लोड करें, लेकिन क्या कोई विकल्प है?

उत्तर

5

आप अपने प्रारंभकर्ता में तालिका अस्तित्व के लिए एक चेक जोड़ सकते हैं।

if TheModel.table_exists? 
    // do something with the model 
end 
+0

मैं ActiveAdmin मणि के प्रारंभकर्ता में इस दृष्टिकोण का उपयोग कर समाप्त हुआ, क्योंकि यह मणि पूरी तरह से अनुचित रूप से लोड होता है। किसी भी तरह, +1। – MrDerp

28

शायद सबसे तेज़ तरीका अपमानजनक प्रारंभकर्ता को ऐप के बाहर एक अस्थायी निर्देशिका में ले जाना है, और उसके बाद अपना स्कीमा लोड चलाएं। लेकिन यह है कि अगर काम नहीं करता है, या किसी कारण से एक विकल्प नहीं है, तो आप हमेशा के आसपास काम कर सकता है कि एक नंगे हड्डियों रेल एप्लिकेशन बनाने के द्वारा स्कीमा लोड करने के लिए:

  1. एक नई रेल एप्लिकेशन बनाएं: rails new (app)-fixer
  2. फिक्सर ऐप में अपने gemfile (जब तक कि विशिष्ट अपवाद नहीं हैं) की प्रतिलिपि बनाएँ।
  3. फिक्सर ऐप पर अपने database.yml कॉन्फ़िगरेशन की प्रतिलिपि बनाएँ।
  4. फिक्सर ऐप पर अपनी schema.rb फ़ाइल कॉपी करें।
  5. अपने ऐप के लिए आवश्यक सभी उचित "बंडल इंस्टॉल" कमांड करें।
  6. फिर "rake db:drop db:create db:schema:load"

कि स्क्रैच से एक नया डेटाबेस, अपने वर्तमान स्कीमा के आधार पर एकत्रित हो जाएगा चलाते हैं।

+0

स्वीकार्य उत्तर होना चाहिए। एक आकर्षण की तरह काम किया – Aakanksha