2016-05-10 16 views
6

Tôi đã đấu tranh với db:seed:all trong hơn một giờ và từ từ tôi đang mất dần ý định về điều này.Các nhà nhân giống theo chuỗi-CLI - Không thể đọc thuộc tính không xác định

Tôi có một mô hình đơn giản:

'use strict'; 
module.exports = function (sequelize, DataTypes) { 
    var Car = sequelize.define('Cars', { 
    name: DataTypes.STRING, 
    type: DataTypes.INTEGER, 
    models: DataTypes.INTEGER 
    }, { 
     classMethods: { 
     associate: function (models) { 
      // associations can be defined here 
     } 
     } 
    }); 
    return Car; 
}; 

này là trong một sự chuyển đổi và đi đến cơ sở dữ liệu sử dụng sequelize db:migrate mà hoạt động tốt.

Tiếp theo tôi muốn chèn - thông qua tệp hạt giống - 2 ô tô. Vì vậy, tôi chạy lệnh sequelize seed:create --name insertCars và thêm bulkInsert:

'use strict'; 

module.exports = { 
    up: function (queryInterface, Sequelize) { 
    return queryInterface.bulkInsert(
     'Cars', 
     [ 
     { 
      name: "Auris", 
      type: 1, 
      models: 500, 
      createdAt: Date.now(), updatedAt: Date.now() 
     }, 
     { 
      name: "Yaris", 
      type: 1, 
      models: 500, 
      createdAt: Date.now(), updatedAt: Date.now() 
     } 
     ] 
    ); 
    }, 

    down: function (queryInterface, Sequelize) { 
    } 
}; 

Bây giờ khi tôi chạy sequelize db:seed:all tôi nhận được lỗi sau:

Loaded configuration file "config\config.json". 
Using environment "development". 
== 20160510132128-insertCars: migrating ======= 
Seed file failed with error: Cannot read property 'name' of undefined 

Có ai có bất kỳ kinh nghiệm với chạy các máy gieo hạt? Để biết thông tin của bạn ở đây là tập tin cấu hình của tôi:

{ 
    "development": { 
    "username": "mydbdude", 
    "password": "mydbdude", 
    "database": "Cars", 
    "host": "127.0.0.1", 
    "dialect": "mssql", 
    "development": { 
     "autoMigrateOldSchema": true 
    } 
    }, 
    ....other configs 
} 

EDIT: Output từ db: di chuyển

Sequelize [Node: 5.9.1, CLI: 2.4.0, ORM: 3.23.0] 

Loaded configuration file "config\config.json". 
Using environment "development". 
No migrations were executed, database schema was already up to date. 
+0

Xin chào, bạn có thể hiển thị đầu ra đầu cuối của 'sequelize db: migrate' không? – paolord

+0

@paolord Tôi đã chỉnh sửa câu hỏi ban đầu của mình và thêm đầu ra từ db: di chuyển ở phía dưới – Tikkes

+0

bạn đang sử dụng phương ngữ DB nào? Tôi đã có vấn đề với Postgres và tên trường hợp nhạy cảm (ví dụ: 'Ô tô' so với bảng ô tô' postgres tạo ra) –

Trả lời

0

Vì tôi vẫn chưa thể để làm việc này, tôi, bây giờ thì, đăng bài giải pháp của tôi tôi sử dụng mà hoạt động khá tốt nhưng được xây dựng tùy chỉnh.

Đầu tiên, tôi đã tạo một tệp JSON chứa đối tượng mà tôi muốn tạo hạt giống. tức

dataSources: [ 
    { 
     name: 'Pattern' 
    }, 
    { 
     name: 'Upload' 
    } 
] 

Tiếp theo, tôi đã thực hiện một seeder.js ở phía máy chủ của ứng dụng của tôi chứa (phiên bản tỉa tất nhiên) sau

var models = require('./../models'), 
sql = models.sequelize, 
Promise = models.Sequelize.Promise; 

var objects = require('./seed/objects'), //this is where my object file is 
dataSources = objects.dataSources; 


var express = require('express'); 

var seedDatabase = function() { 
    var promises = []; 
    promises.push(createDataSources()); 
    //more can be added to the promises 

    return Promise.all(promises); 
}; 

function createDataSources() { 
    return models.sequelize 
     .transaction(
      { 
       isolationLevel: models.sequelize.Transaction.ISOLATION_LEVELS.READ_COMMITTED 
      }, 
      function (t) { 
       return models.DataSource 
        .findAll({ 
         attributes: [ 
          'id' 
         ] 
        }) 
        .then(function (result) { 
         if (!result || result.length == 0) { 
          return models.DataSource 
           .bulkCreate(dataSources, { transaction: t }) 
           .then(function() { 
            console.log("DataSources created"); 
           }) 
         } 
         else { 
          console.log("DataSources seeder skipped, already objects in the database..."); 
          return; 
         } 
        }); 
      }) 
     .then(function (result) { 
      console.log("DataSources seeder finished..."); 
      return; 
     }) 
     .catch(function (error) { 
      console.log("DataSources seeder exited with error: " + error.message); 
      return; 
     }); 
}; 

module.exports = { 
    seedDatabase: seedDatabase 
} 

Bây giờ tất cả thiết lập này được thực hiện, tôi có thể sử dụng này seedDatabase hoạt động khi ứng dụng của tôi bắt đầu để chạy seeder của tôi, như vậy:

Bây giờ, khi bạn chạy ứng dụng của bạn, seeder sẽ kiểm tra cơ sở dữ liệu nếu bất kỳ đối tượng nào của bạn đã được chèn vào cơ sở dữ liệu. Nếu vậy, seeder bị bỏ qua, nếu không, chúng được chèn vào.

Tôi hy vọng điều này sẽ giúp các bạn.

Các vấn đề liên quan