2015-10-13 7 views
7

पर अन्य योगदानकर्ता से डेटाबेस पहुंच योग्य नहीं है Ι ने एक दोस्त के साथ एक रेल स्प्री प्रोजेक्ट शुरू किया है, और हम संस्करण नियंत्रण के लिए गिटहब का उपयोग करते हैं।रेल स्प्री प्रोजेक्ट - गिट

मैंने अपनी मशीन में नमूना प्रोजेक्ट बनाया है, और उस पर स्प्री कार्यक्षमता स्थापित की है। यह नमूना उत्पादों के साथ एक डेटाबेस बनाता है, इसलिए जैसे:

enter image description here

मेरे दोस्त उसकी मशीन और यह आयात में परियोजना क्लोन, चल rails serverMigrationException साथ विफल रहता है और rake db:migrate चलाने के लिए उसे पूछता है।

rake db:migrate चल रहा है कुछ माइग्रेशन के बाद विफल रहता है, डीबी कॉलम पर।

rake aborted! 
StandardError: An error has occurred, this and all later migrations canceled: 

SQLite3::SQLException: no such column: spree_calculators.deleted_at: SELECT "spree_calculators".* FROM "spree_calculators" WHERE "spree_calculators"."deleted_at" IS NULL ORDER BY "spree_calculators"."id" ASC LIMIT 1000C:in `find_each' 
C:/Users/User/xylino/xylino_serena/db/migrate/20151011115236_migrate_old_preferences.spree.rb:15:in `migrate_preferences' 
C:/Users/User/xylino/xylino_serena/db/migrate/20151011115236_migrate_old_preferences.spree.rb:4:in `up' 
C:in `migrate' 
ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: spree_calculators.deleted_at: SELECT "spree_calculators".* FROM "spree_calculators" WHERE "spree_calculators"."deleted_at" IS NULL ORDER BY "spree_calculators"."id" ASC LIMIT 1000 
C:in `find_each' 
C:/Users/User/xylino/xylino_serena/db/migrate/20151011115236_migrate_old_preferences.spree.rb:15:in `migrate_preferences' 
C:/Users/User/xylino/xylino_serena/db/migrate/20151011115236_migrate_old_preferences.spree.rb:4:in `up' 
C:in `migrate' 
SQLite3::SQLException: no such column: spree_calculators.deleted_at 
C:in `find_each' 
C:/Users/User/xylino/xylino_serena/db/migrate/20151011115236_migrate_old_preferences.spree.rb:15:in `migrate_preferences' 
C:/Users/User/xylino/xylino_serena/db/migrate/20151011115236_migrate_old_preferences.spree.rb:4:in `up' 
C:in `migrate' 
Tasks: TOP => db:migrate 
(See full trace by running task with --trace) 

उसके बाद, rails server फिर से चलाने के सफल है, लेकिन कोई उत्पादों या अन्य वस्तुओं को अपने नमूना पृष्ठ में देखा जा सकता है, तो जैसे:

enter image description here

वहाँ है कुछ गड़बड़ी है डेटाबेस। पार्ट्स या सभी सुरक्षा पहुंच के कारण संभवतः पहुंच योग्य नहीं हैं क्योंकि हम डीबी साझा कर रहे हैं, लेकिन मुझे कोई समाधान नहीं मिल रहा है। या शायद यह सिर्फ एक बोटेड माइग्रेशन समस्या है

कोई विचार?

+0

आप नहीं कर रहे हैं विकास में एक साझा डीबी होना चाहिए, बीज – apneadiving

उत्तर

6

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

सर्वोत्तम ऐसा करने का तरीका, rake db:schema:load चलाने के लिए प्रोजेक्ट पर एक नए डेवलपर के लिए है। यह आपके डीबी/schema.rb फ़ाइल से डेटाबेस संरचना लोड करेगा, जिसमें सब कुछ यथासंभव अद्यतित होगा। इसके बाद, आप सब कुछ माइग्रेट किए जाने के सत्यापन के लिए rake db:migrate चला सकते हैं।

हालांकि, उसके बाद, आप डेटाबेस के संरचना है, लेकिन नहीं डेटाबेस की सामग्री। तो कहें कि आपके पास उपयोगकर्ता के रूप में [email protected] के साथ उपयोगकर्ता तालिका है। आपके सहयोगी के पास कोई उपयोगकर्ता के साथ उपयोगकर्ता तालिका होगी।

इसे ठीक करने के लिए, आप db/seed.rb फ़ाइल को संपादित कर सकते हैं।

User.create(name: 'Dimitris Sfounis', email: '[email protected]', password: 'password123') 
User.create(name: 'Some Colleague', email: '[email protected]', password: 'password123') 
Product.create(name: 'Ruby on Rails Tote', price: 15.99) 
Product.create(name: 'Ruby on Rails Bag', price: 22.99) 

विचार यहाँ है कि आप डेमो डेटा, पर्याप्त उठना और चल रहा है और एक ब्रांड के नए में परीक्षण के सामान और खाली डेटाबेस बनाने: वहाँ में, आप सामान की तरह कर सकते हैं। उस जगह के साथ, rake db:seed ऐप चलाने के लिए पर्याप्त डेटा प्रदान करेगा।

यदि यह पर्याप्त नहीं है, और आप सभी डेवलपर्स के लिए डेटाबेस की सटीक प्रतियां चाहते हैं, तो आप अपना SQLite डेटाबेस अपलोड कर सकते हैं और उनमें से प्रत्येक डेटाबेस को खींचते समय एक नई प्रति डाउनलोड कर सकते हैं।हालांकि, प्रबंधन करना मुश्किल है, क्योंकि हर बार जब कोई नया माइग्रेशन के साथ मास्टर शाखा को अपडेट करता है, तो आपको SQLite फ़ाइल को अपडेट करना होगा। अन्य डेटाबेस के लिए, आप pg_dump (पोस्टग्रेस) या mysqldump (MySQL) के साथ डंप और पुनर्स्थापित कर सकते हैं।

+0

जाने का तरीका हैं स्पष्टीकरण के लिए एक प्रश्न, यदि डीबी संरचना है, तो क्यों डीबी: माइग्रेट 'विफल हो जाएगा और गायब कॉलम की रिपोर्ट करेगा? –

+0

मेरा अनुमान है कि डेटाबेस फ़ाइलों या माइग्रेशन इतिहास के साथ कोई समस्या है। कभी-कभी मैं माइग्रेशन लिखता हूं, इसे चलाता हूं, अपना दिमाग बदलता हूं, माइग्रेशन बदलता हूं, और इसे फिर से चलाता हूं। हालांकि, मुझे ऊपर/नीचे माइग्रेशन सही रिवर्स के रूप में काम नहीं कर सकता है। या, कुछ माइग्रेशन आधे रास्ते में विफल हो सकता है और डीबी को आंशिक रूप से माइग्रेटेड स्थिति में छोड़ सकता है। या, एक सहयोगी के पास माइग्रेशन 20151027 हो सकता है जो कॉलम बदलता है, लेकिन 20151026 उन्हें हटा देता है और पहले तैनात किया जाता है। जब दोनों शाखाएं विलय हो जाती हैं तो सामान टूट सकता है। –

1

आप अपने मशीन पर sqlite3 के साथ एक नई रेल/होड़ परियोजना शुरू करते हैं (यह मशीन एक कॉल) और अपने दोस्त के मन में कुछ चीजें रखने के लिए आप मशीन बी पर एक ही कोड का उपयोग करना चाहता:

db/ के तहत संग्रहीत .sqlite3-फ़ाइलें स्वचालित रूप से रेल जनरेटर द्वारा .gitignore फ़ाइल में जोड़ दी गई हैं।

... 
# Ignore the default SQLite database. 
/db/*.sqlite3 
/db/*.sqlite3-journal 
... 

तो अपने दोस्त भी, डेटाबेस नहीं मिलता है अगर आप .gitignore (जो मैं, सलाह नहीं देते परिवर्तन नहीं किया, क्योंकि जब तैनाती आप नहीं नहीं अपने उत्पादन पर विकास सामान करना चाहते हैं सर्वर)

कार्यप्रवाह होना चाहिए:

  • आप एक मशीन का विकास एक
  • आप प्रतिबद्ध/धक्का बदलता है
  • आपके मित्र परिवर्तन खींचता है
  • हर बार जब वह रेपो खींचता है तो आपका मित्र rake db:migrate पर कॉल करता है।
  • (वैकल्पिक) आप db/seeds.rb नमूना डेटा के साथ पॉप्युलेट और जब वह धक्का आप कर सकते हैं rake db:seed
  • फोन 1-4 चरण अपने डेटाबेस सही ढंग से सेटअप

आशा है की इस समझ में मदद करता है

संबंधित मुद्दे