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"
}
最も参考になるコメント
誰かが解決策を探してここに来る場合に備えて、これが私がすることです(そしてそれは魅力のように機能します!)