2013-07-17 7 views
16

पर मॉडल स्कीमा बदलने हम ORM sequelize.js उपयोग कर रहे हैं और इस तरह के रूप में एक मॉडल को परिभाषित किया है:Sequelize: उत्पादन

module.exports = function(sequelize, DataTypes) { 
    var Source = sequelize.define('Source', { 
     name: { 
      type: DataTypes.STRING, 
      allowNull: false, 
      unique: true 
     } 
    }, { 
     paranoid: true 
    }); 

    return Source; 
}; 

यह उत्पादन के लिए तैनात किया और डेटाबेस sequelize.sync उपयोग करने के लिए सिंक किए है।

module.exports = function(sequelize, DataTypes) { 
    var Source = sequelize.define('Source', { 
     name: { 
      type: DataTypes.STRING, 
      allowNull: false, 
      unique: true 
     }, 
      location: { 
        type: DataTypes.STRING 
      } 
    }, { 
     paranoid: true 
    }); 

    return Source; 
}; 

हालांकि, जब उत्पादन sequelize.sync करने की तैनाती इस नए पैरामीटर नहीं जोड़ता है: अगला कदम है, हम एक पैरामीटर जोड़ते हैं। इसका कारण यह है sync एक करता है:

CREATE TABLE IF NOT EXISTS

और वास्तव में स्कीमा को अपडेट नहीं करता है, तो तालिका मौजूद है। यह noted in their documentation है।

एकमात्र विकल्प { force: true } पर लगता है, हालांकि यह उत्पादन डेटाबेस के लिए ठीक नहीं है।

क्या किसी को पता है कि परिवर्तन आवश्यक होने पर स्कीमा को सही तरीके से कैसे अपडेट किया जाए?

उत्तर

18

आप Sequelize माइग्रेशन लागू करना चाहते हैं:

http://docs.sequelizejs.com/manual/tutorial/migrations.html

ये आप ज्ञात राज्यों के बीच डेवलपर, मचान, और उत्पादन डेटाबेस संक्रमण के लिए सक्षम हो जाएगा।

+1

आपने मेरा दिन बचाया! –

+0

मेरे पास इसके आसपास एक सवाल है। मैं अनुक्रमित मॉडल का उपयोग कर एक नया मॉडल और इसकी संबंधित माइग्रेशन स्क्रिप्ट बनाने के लिए सीक्वेलिज़-क्ली का उपयोग कर सकता हूं: जो मॉडल और माइग्रेशन स्क्रिप्ट बनाता है, क्या कोई नया तरीका है जो नए कॉलम या बाधाओं को जोड़ते समय किया जा सकता है। क्या हमें इन कार्यों के लिए माइग्रेशन स्क्रिप्ट मैन्युअल रूप से लिखना है या माइग्रेशन स्क्रिप्ट को स्वत: उत्पन्न करने का कोई तरीका है। –

+1

जो अनुक्रमित करने में समस्या है हमें मैन्युअल रूप से माइग्र स्क्रिप्ट्स गीज़ लिखना है! –