Knex: dotenvでknexを使用する

作成日 2014年12月04日  ·  19コメント  ·  ソース: knex/knex

やあ、
dotenv

最も参考になるコメント

誰かが解決策を探してここに来る場合に備えて、これが私がすることです(そしてそれは魅力のように機能します!)

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();

エクスポートのデフォルトrequire( 'knex')({
デバッグ:true、
クライアント: '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ノードが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"
}
このページは役に立ちましたか?
0 / 5 - 0 評価