我创建了一个迁移并运行它。它说工作正常,但什么也没发生。我认为它甚至连接到我的数据库。
var util = require("util");
module.exports = {
up : function(migration, DataTypes, done) {
migration.createTable('nameOfTheNewTable', {
attr1 : DataTypes.STRING,
attr2 : DataTypes.INTEGER,
attr3 : {
type : DataTypes.BOOLEAN,
defaultValue : false,
allowNull : false
}
}).success(
function() {
migration.describeTable('nameOfTheNewTable').success(
function(attributes) {
util.puts("nameOfTheNewTable Schema: "
+ JSON.stringify(attributes));
done();
});
});
},
down : function(migration, DataTypes, done) {
// logic for reverting the changes
}
};
{
"development": {
"username": "user",
"password": "pw",
"database": "my-db",
"dialect" : "sqlite",
"host": "localhost"
}
}
./node_modules/sequelize/bin/sequelize --migrate --env development
Loaded configuration file "config/config.json".
Using environment "development".
Running migrations...
20130921234513-initial.js
nameOfTheNewTable Schema: {"attr1":{"type":"VARCHAR(255)","allowNull":true,"defaultValue":null},"attr2":{"type":"INTEGER","allowNull":true,"defaultValue":null},"attr3":{"type":"TINYINT(1)","allowNull":false,"defaultValue":false}}
Completed in 8ms
我可以一遍又一遍地运行它,输出总是一样的。我已经在一个数据库上尝试过,我知道它有现有的表并尝试描述这些表,但仍然没有任何反应。
我做错了吗?
我很确定我没有连接到数据库,但尝试我可能无法使用迁移进行连接。我可以使用sqlite3 my-db.sqlite
连接并运行.tables
之类的命令来查看我之前创建的表,但是我不能在我的生活中获得使用迁移创建的“nameOfTheNewTable”表。 (我也希望在迁移中创建索引)。我尝试使用“development”,更改config.json
中的值,如主机,数据库(my-db,.. / my-db,my-db.sqlite)等。
这是一个很好的例子,在config.json
我放"database" : "bad-db"
并且迁移的输出完全相同。完成后,找不到bad-db.sqlite文件。
答案 0 :(得分:9)
您需要在config.json中指定'storage'参数,以便sequelize知道要用作sqlite DB的文件。
Sequelize默认为sqlite使用内存存储,因此它正在迁移内存数据库,然后退出,有效地破坏它刚刚迁移的数据库。
答案 1 :(得分:1)
您很可能必须等待migration.createTable
完成:
migration.createTable(/*your options*/).success(function() {
migration.describeTable('nameOfTheNewTable').success(function(attributes) {
util.puts("nameOfTheNewTable Schema: " + JSON.stringify(attributes));
done()
});
})