npm db-migrate SQLite3 Windows说明不匹配
我不知道把数据库放在哪里,因为说明是针对linux/mac的。我不知道在哪里运行迁移文件。这些说明对初学者来说不够好。我感到很困惑。我没有成功创建可以连接到的数据库。稍后,在说明中,教程将引导您使用db-migration创建数据库。耶,我认为这可能会有所帮助。不。我不能创建一个可以使用NodeJS连接到的SQLite数据库。npm db-migrate SQLite3 Windows说明不匹配
这是我到目前为止有:
database.json
{
"test": {
"driver": "sqlite3",
"filename": "/data/keyword-wrangler2.test.sqlite"
},
"dev": {
"driver": "sqlite3",
"filename": "/data/keyword-wrangler2.dev.sqlite"
},
"production": {
"driver": "mysql",
"host": "localhost",
"user": "root",
"password": "root",
"database": "keyword_wrangler"
}
}
的指令具有文件名= “/var/tmp/keyword-wrangler.sqlite”。我们在Windows上没有/ var文件夹。我应该创建一个还是可以将数据库放在我想要的位置?
20160304212317-createKeywordAndCategoryTable.js
然后我跑这个命令:db-migrate create createKeywordAndCategoryTable --env test
并根据指示所做的更改。以下是迁移文件:
'use strict';
var dbm = require('db-migrate');
var type = dbm.dataType;
var async = require('async');
var seed;
/**
* We receive the dbmigrate dependency from dbmigrate initially.
* This enables us to not have to rely on NODE_PATH.
*/
exports.setup = function(options, seedLink) {
dbm = options.dbmigrate;
type = dbm.dataType;
seed = seedLink;
};
exports.up = function(db, callback) {
async.series(
[
db.createTable.bind(db, 'keyword', {
id: { type: 'int', primaryKey: true, autoIncrement: true, notNull: true },
value: { type: 'string', length: '128', notNull: true, unique: true },
categoryID: { type: 'int', notNull: true }
}),
db.createTable.bind(db, 'category', {
id: { type: 'int', primaryKey: true, autoIncrement: true, notNull: true },
name: { type: 'string', length: '128', notNull: true }
})
], callback);
};
exports.down = function(db, callback) {
async.series(
[
db.dropTable.bind(db, 'keyword'),
db.dropTable.bind(db, 'category')
], callback);
};
根据我应该能够运行此命令的说明:db-migrate up --env test
和文件应该被处理和数据库应该存在。
从哪里?如果我运行从我的项目的根文件夹中的命令,我收到此错误:
db-migrate up --env test
[ERROR] Error: SQLITE_CANTOPEN: unable to open database file
at Error (native)
如果我运行从我的项目的迁移文件夹中的命令,我收到此错误:
\migrations>db-migrate up --env test
[ERROR] Error: Could not find database config file 'C:\Users\pdl\Projects\keyword-wrangler\keyword-wrangler3\migrations/database.json'
at Object.exports.loadFile (C:\Users\pdl\Projects\keyword-wrangler\keyword-wrangler3\node_modules\db-migrate\lib\config.js:45:11)
at loadConfig (C:\Users\pdl\Projects\keyword-wrangler\keyword-wrangler3\node_modules\db-migrate\api.js:508:18)
at Object.dbmigrate (C:\Users\pdl\Projects\keyword-wrangler\keyword-wrangler3\node_modules\db-migrate\api.js:67:17)
at Object.module.exports.getInstance (C:\Users\pdl\Projects\keyword-wrangler\keyword-wrangler3\node_modules\db-migrate\index.js:56:10)
at C:\Users\pdl\AppData\Roaming\npm\node_modules\db-migrate\bin\db-migrate:34:23
at C:\Users\pdl\AppData\Roaming\npm\node_modules\db-migrate\node_modules\resolve\lib\async.js:44:21
at ondir (C:\Users\pdl\AppData\Roaming\npm\node_modules\db-migrate\node_modules\resolve\lib\async.js:187:31)
at onex (C:\Users\pdl\AppData\Roaming\npm\node_modules\db-migrate\node_modules\resolve\lib\async.js:93:22)
at C:\Users\pdl\AppData\Roaming\npm\node_modules\db-migrate\node_modules\resolve\lib\async.js:24:18
at FSReqWrap.oncomplete (fs.js:82:15)
有人可以请我知道我失踪的明显步骤或信息吗?
完全沮丧!
这是一个路径问题 - 在Windows上使用以Xnix为中心的工具的许多问题之一。 (我真的很同情你;我最近改用了Mac,所有这些问题都立即消失了)。如果你没有Mac或Linux机器的话,你可能会考虑使用Cygwin来解决这类问题。
你的DB-迁移错误信息开始时用:
Could not find database config file 'C:\Users\pdl\Projects\keyword-wrangler\keyword-wrangler3\migrations/database.json'
看着你的GitHub project,我看你的database.json文件是在项目的根,而不是在你的迁移文件夹中。我没有一台Windows机器可以方便地自己测试,但您可以尝试将该database.json文件移动到您的migrations文件夹中,或从项目根目录运行迁移,并通过db-migrate指定迁移文件的路径docs。
我希望这会有所帮助。
这个软件包游戏很麻烦,所以我想我会在这里添加我的答案,以防其他人遇到相同的问题。 对于第一个问题,您可以将数据库存储在任何需要的地方。我将数据库存储在项目的范围内,并将其添加到我的.gitignore中。
"dev": {
"driver": "sqlite3",
"filename": "db/dev.db"
},
在运行db:migrate之前,请确保您创建了“filename”属性中指定的文件。 db-migrate不会为你创建该文件。
对于你应该在哪里运行这些命令的主要问题。看看回购他们使用process.cwd()作为basePath。所以为你的“database.json”设置的路径应该与你调用db-migrate的地方相关。
例如,我有以下文件夹结构。
├── package.json
├── config
│ └── database.json
└── db
├── dev.db
└── migrations
为了能够运行我的迁移,我在我的package.json中为脚本添加了一个脚本。
"db:rollback": "db-migrate --migrations-dir db/migrations --config config/database.json down --env dev",
如果不指定--migrations-dir
和--config
它会寻找同一目录db-migrate
被调用内的文件。
以下是源代码中使用的默认值片段。
.default({
verbose: false,
table: 'migrations',
'seeds-table': 'seeds',
'force-exit': false,
'sql-file': false,
'non-transactional': false,
config: internals.configFile || internals.cwd + '/database.json', //cwd -- current working directory
'migrations-dir': internals.cwd + '/migrations',
'vcseeder-dir': internals.cwd + '/VCSeeder',
'staticseeder-dir': internals.cwd + '/Seeder',
'ignore-completed-migrations': false
})
https://github.com/db-migrate/node-db-migrate/blob/master/lib/commands/set-default-argv.js
刚刚从
/data/keyword-wrangler2.dev.sqlite
改变你的路径
./data/keyword-wrangler2.dev.sqlite
,它会工作。对这两条路径进行更改。