Knex: 将 knex 与 dotenv 结合使用

创建于 2014-12-04  ·  19评论  ·  资料来源: knex/knex

你好,
有没有一种简单的方法来使用 Knex 和带有dotenv的迁移/种子 CLI?

最有用的评论

如果有人来这里寻找解决方案,这就是我所做的(它就像魅力一样!)

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
  }
};

所有19条评论

您需要创建一个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脚本拾取.envtest:knex与工程.env.test

"scripts": {
  "knex": "babel-node -r dotenv/config node_modules/.bin/knex",
  "test:knex": "DOTENV_CONFIG_PATH=.env.test npm run knex"
}
此页面是否有帮助?
0 / 5 - 0 等级

相关问题

PaulOlteanu picture PaulOlteanu  ·  3评论

saurabhghewari picture saurabhghewari  ·  3评论

marianomerlo picture marianomerlo  ·  3评论

tjwebb picture tjwebb  ·  3评论

aj0strow picture aj0strow  ·  3评论