dresende / node-orm2

Object Relational Mapping
http://github.com/dresende/node-orm2
MIT License
3.07k stars 376 forks source link

I have errors when database synchronization #525

Closed lz8878 closed 10 years ago

lz8878 commented 10 years ago

When I run node database_sync.js,It throws some errors:

(orm/mysql) SHOW TABLES LIKE 'ddl_sync_test'
undefined prop.mapsTo { type: 'number', key: true, serial: true } Error
    at Sync.createColumn (/Users/lym125/nodejs/blog/node_modules/sql-ddl-sync/lib/Sync.js:113:48)
    at Sync.createCollection (/Users/lym125/nodejs/blog/node_modules/sql-ddl-sync/lib/Sync.js:68:14)
    at /Users/lym125/nodejs/blog/node_modules/sql-ddl-sync/lib/Sync.js:23:12
    at Query._callback (/Users/lym125/nodejs/blog/node_modules/sql-ddl-sync/lib/Dialects/mysql.js:13:10)
    at Query.Sequence.end (/Users/lym125/nodejs/blog/node_modules/mysql/lib/protocol/sequences/Sequence.js:75:24)
    at Query._handleFinalResultPacket (/Users/lym125/nodejs/blog/node_modules/mysql/lib/protocol/sequences/Query.js:143:8)
    at Query.EofPacket (/Users/lym125/nodejs/blog/node_modules/mysql/lib/protocol/sequences/Query.js:127:8)
    at Protocol._parsePacket (/Users/lym125/nodejs/blog/node_modules/mysql/lib/protocol/Protocol.js:172:24)
    at Parser.write (/Users/lym125/nodejs/blog/node_modules/mysql/lib/protocol/Parser.js:62:12)
    at Protocol.write (/Users/lym125/nodejs/blog/node_modules/mysql/lib/protocol/Protocol.js:37:16)

TypeError: Cannot call method 'replace' of undefined
    at /Users/lym125/nodejs/blog/node_modules/orm/node_modules/sql-query/lib/Dialects/mysql.js:28:19
    at Array.map (native)
    at Object.exports.escapeId (/Users/lym125/nodejs/blog/node_modules/orm/node_modules/sql-query/lib/Dialects/mysql.js:18:48)
    at Sync.createColumn (/Users/lym125/nodejs/blog/node_modules/sql-ddl-sync/lib/Sync.js:117:26)
    at Sync.createCollection (/Users/lym125/nodejs/blog/node_modules/sql-ddl-sync/lib/Sync.js:68:14)
    at /Users/lym125/nodejs/blog/node_modules/sql-ddl-sync/lib/Sync.js:23:12
    at Query._callback (/Users/lym125/nodejs/blog/node_modules/sql-ddl-sync/lib/Dialects/mysql.js:13:10)
    at Query.Sequence.end (/Users/lym125/nodejs/blog/node_modules/mysql/lib/protocol/sequences/Sequence.js:75:24)
    at Query._handleFinalResultPacket (/Users/lym125/nodejs/blog/node_modules/mysql/lib/protocol/sequences/Query.js:143:8)
    at Query.EofPacket (/Users/lym125/nodejs/blog/node_modules/mysql/lib/protocol/sequences/Query.js:127:8)
//database_sync.js
var orm    = require("orm");
var mysql  = require("mysql");
var Sync   = require("sql-ddl-sync").Sync;
var database = require("./database")

database(function(err, db){
  if (err) throw err;

  var driver = db.driver;

  var sync = new Sync({
    dialect : "mysql",
    driver  : driver,
    debug   : function (text) {
      console.log("> %s", text);
    }
  });

  sync.defineCollection("ddl_sync_test", {
    id     : { type: "serial", key: true },
    name   : { type : "text", required: true },
    age    : { type : "number", rational: true },
    male   : { type : "boolean" },
    born   : { type : "date", time: true },
    born2  : { type : "date" },
    int2   : { type : "number", size: 2 },
    int4   : { type : "number", size: 4 },
    int8   : { type : "number", size: 8 },
    float4 : { type : "number", rational: true, size: 4 },
    float8 : { type : "number", rational: true, size: 8 },
    type   : { type : "enum", values: [ 'dog', 'cat'], defaultValue: 'dog', required: true },
    photo  : { type : "binary" }
  });

  sync.sync(function (err) {
    if (err) {
      console.log(err);
    } else {
      console.log("> Sync Done");
    }
    process.exit(0);
  });

});

//database.js
var env = process.env.NODE_ENV ? process.env.NODE_ENV : 'development';

var orm = require('orm');
var yaml = require('js-yaml');
var fs = require('fs');

module.exports = function(callback){
  var database_configs;
  try {
    database_configs = yaml.safeLoad(fs.readFileSync('./config/database.yml', 'utf8'));
  } catch (err) {
    return callback(err);
  }

  orm.connect(database_configs[env], function (err, db) {
    if (err) return callback(err);
    callback(null, db);
  });
};
#config/database.yml
mysql: &mysql
  host: "localhost"
  port: 3306
  user: "root"
  password: ""
  protocol: "mysql"
  #socketPath: "/var/run/mysqld/mysqld.sock"

# Normally you don't need to touch anything here
development:
  <<: *mysql
  database: blog_development
  query: 
    debug: true
production:
  <<: *mysql
  database: blog_development
test:
  <<: *mysql
  database: blog_test
lz8878 commented 10 years ago

Why is it so ? I need help, thank you!!!!

dxg commented 10 years ago

Excuse the delay, I've been busy. The example was outdated and there were some changes which made things no longer work. Please see the updated readme.

I tested & it now works in your scenario.