您需要创建一个knexfile
,在顶部调用 dotenv (https://github.com/motdotla/dotenv#usage),然后根据process.env
设置您的配置。
我想我必须做这样的事情来填充导出哈希的正确键?
var dotenv = require('dotenv');
dotenv.load();
module.exports[process.env.NODE_ENV] = {
client: 'mariasql',
connection: {
host: process.env.DB_HOST,
user: process.env.DB_USERNAME,
password: process.env.DB_PASSWORD,
db: process.env.DB_NAME,
charset: 'utf8'
},
pool: {
min: 2,
max: 10
},
migrations: {
tableName: 'knex_migrations'
}
};
正确的
这不起作用,无论我设置什么,迁移仍然会寻找默认环境(开发)。
见#527
自从我合并以来一直没有发布,但这正是您想要的。 环境是一个奇怪的功能,更好的解决方案是使用配置层次结构工具(dotenv 是一个简单的工具)。 现在只需将所有环境设置为同一个对象。
exports.development = exports.production = exports.otherEnv = configObject;
如果有人来这里寻找解决方案,这就是我所做的(它就像魅力一样!)
require('dotenv').config({path: 'path_to_env_file'});
module.exports = {
client: 'pg',
connection: {
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASS,
database: process.env.DB_NAME
}
};
@mbavio谢谢你解决了这个问题。 对我来说,问题特别在于我的 knexfile.js 是我项目的子目录,而不是根目录。 因此,如果不将路径传递给它,它就无法找到我的.env
。 再次感谢!
当我想运行knex migrate:currentVersion
时,我遇到了问题,它不是从 .env 文件加载的。 我能做些什么来解决这个问题?
当我尝试将迁移作为 npm 脚本运行时,我遇到了同样的问题。 当我将脚本更改为node -r dotenv/config ./node_modules/knex/bin/cli.js migrate:latest
时它起作用
大家好 可以在静默模式下运行 knex,所以没有通过提示环境询问我,我通过 ssh 部署在不同的机器上
@kcheang我无法将这种方法与通用命令一起使用,尤其是当我需要添加 dotenv_config_path 参数时。
使用 Babel (ES6) 你可以:
```javascript
从 'dotenv' 导入 dotenv;
dotenv.config();
导出默认要求('knex')({
调试:真的,
客户:'mysql',
联系: {
主机:process.env.DB_HOST,
用户:process.env.DB_USER,
密码:process.env.DB_PW,
数据库:process.env.DB,
字符集:'utf8',
}
});
@gerbus使用迁移和种子时不会有问题吗?
当我尝试将迁移作为 npm 脚本运行时,我遇到了同样的问题。 当我将脚本更改为
node -r dotenv/config ./node_modules/knex/bin/cli.js migrate:latest
时它起作用
你他妈的天才
您可能会发现这很有帮助:
env $(cat .env) knex migrate:latest
如果您没有全局安装 knex,则:
env $(cat .env) ./node_modules/knex/bin/cli.js migrate:latest
@RaimoJohanson一个更合适的方法是
env $(cat .env) ./node_modules/.bin/knex migrate:latest
或者如果您使用的是 NPM 脚本:
env $(cat .env) knex migrate:latest
(使用npm脚本时会自动解析.bin目录)
@Jakobud我阅读了 Node 在 npm 脚本中内部使用的 .bin 目录 - 谢谢!
@Jakobud这在 Windows 上不起作用
对于多个.env
文件,使用DOTENV_CONFIG_PATH
环境变量可能是一种解决方案。 在我的package.json
我创建了一个knex
脚本拾取.env
和test:knex
与工程.env.test
:
"scripts": {
"knex": "babel-node -r dotenv/config node_modules/.bin/knex",
"test:knex": "DOTENV_CONFIG_PATH=.env.test npm run knex"
}
最有用的评论
如果有人来这里寻找解决方案,这就是我所做的(它就像魅力一样!)