sails.config.datastores
データストア設定(または単にデータストア)は、アダプターの「保存された設定」のようなものです。
Sailsでは、データベースアダプターは、アプリケーションと何らかの構造化されたデータストレージ(通常はデータベース)との間の中間業者です。しかし、アダプターがSailsアプリと特定のデータベース間で通信するためには、いくつかの追加情報が必要です。そこで、データストアが登場します。データストアは、adapter
、およびurl
、またはhost
、port
、user
、password
のようなその他の必要な設定情報を指定する辞書(プレーンなJavaScriptオブジェクト)です。
これはモデルごとに上書きできますが、デフォルトでは、アプリ内のすべてのモデルは「default」という名前のデータストアを使用します。
開発中の便宜のために、Sailsはsails-disk
という組み込みのデータベースアダプターを提供しています。このアダプターは、データベースレコードをコンピューターのハードドライブ上のJSONファイルに読み書きすることで、実際のデータベースをシミュレートします。sails-disk
を使用すると、ほぼすべての環境で最小限の設定でSails/Node.jsアプリを簡単に実行できますが、本番環境での使用は想定されていません。アプリをデプロイして実際のユーザーに公開する前に、PostgreSQL、MySQL、MongoDBなどの適切なデータベースを選択する必要があります。そのためには、アプリのデフォルトのデータストアをカスタマイズする必要があります。
当然ながら、アプリのすべてのモデルで共有されるデフォルトのデータストアは「default」という名前です。したがって、別のデータベースを接続するには、変更するキーです。たとえば、ローカルのラップトップにインストールされたMySQLサーバーに対して開発するとします。
まず、SailsおよびWaterline用のMySQLアダプターをインストールします。
npm install sails-mysql --save --save-exact
次に、config/datastores.js
のデフォルトのデータストア設定を次のように編集します。
// config/datastores.js
module.exports.datastores = {
default: {
adapter: require('sails-mysql'),
url: 'mysql://root:squ1ddy@localhost:3306/my_dev_db_name',
}
};
以上です!次回アプリを起動すると、コードが.create()
や.find()
などの組み込みのモデルメソッドを実行するたびに、すべてのモデルが指定されたMySQLデータベースと通信します。
別のデータベースを使用しますか?ご心配なく。MySQLは単なる例です。Sailsアプリでは、サポートされている任意のデータベースアダプターを使用できます。
ここでは、host
、port
、user
、password
、database
などの個別の設定を指定する代わりに、url
を使用したことに気づいたかもしれません。これは接続URL(または「接続文字列」)と呼ばれ、データストアの設定についてSailsとWaterlineに伝えるもう1つのより簡潔な方法です。
この設定スタイルの主な利点の1つは、接続URLの形式がさまざまな種類のデータベースで同じであることです。言い換えれば、MySQL、PostgreSQL、MongoDB、または他のほとんどの一般的なデータベーステクノロジーを使用しているかどうかに関係なく、ほぼ同じに見えるURLを使用して基本的な設定を指定できます。
protocol://user:password@host:port/database
URLのprotocol://
の部分は常に使用しているアダプター(mysql://
、mongodb://
など)に基づいており、URLの残りの部分は、アプリがデータベースを検索して接続するために必要な資格情報とネットワーク情報で構成されています。以下は、上記のMySQLの例からのurl
を分解したもので、各セクションの名前を示しています。
mysql:// root : squ1ddy @ localhost : 3306 / my_dev_db_name
| | | | | |
| | | | | |
protocol user password host port database
本番環境で、クラウドホストされたデータベースを使用している場合は、おそらく接続URL(例:mysql://lkjdsf4:[email protected]:3306/4e843g
)が提供されるでしょう。そうでない場合は、通常、個々の情報から自分で作成することをお勧めします。特定のデータベースの設定方法の詳細については、データベースアダプターのリファレンスを確認してください。
上記の情報がすべて揃っている場合は、接続URLを簡単に構築できます。それらを貼り合わせるだけです。ただし、すべての詳細を指定したくない場合があります(デフォルトのポートを使用する場合や、ユーザー名とパスワードを必要としないローカルデータベースを使用する場合など)。
幸いなことに、データベース接続URLは多かれ少なかれ通常のURLであるため、既にご存知のように、さまざまな情報を省略できます。たとえば、以下に示すのは一般的なマッシュアップで、すべてが有効な接続URLである可能性があります。
protocol://user:password@host:port/databaseName
protocol://user:password@host/databaseName
(ポートなし)protocol://user@host:port/databaseName
(パスワードなし)protocol://host:port/databaseName
(ユーザー名もパスワードもなし)接続URLはSailsアプリのデータベースを設定するための推奨アプローチであるため、可能な限りこれを使用するのが最善です。ただし、技術的には、一部のアダプターは、個別の設定(
user
、password
、host
、port
、database
)を代替としてサポートしています。そのシナリオでは、url
表記と個別の設定の両方が使用されている場合、url以外構成オプションが常に優先されます。ただし、url
または個別のプロパティのいずれか一方の方法を常に使用する必要があります。2つの設定戦略を混在させると、アダプターが混乱したり、基盤となるデータベースドライバーが設定を拒否したりする可能性があります。
本番環境へのデプロイ用にアプリを設定するときは、実際にはconfig/datastores.js
ファイルを使用しません。代わりに、本番環境でのみ適用される特別な構成上書きファイルであるconfig/env/production.js
を利用できます。これにより、config/datastores.js
で設定したurl
およびadapter
(またはurl
のみ)を上書きできます。
// config/env/production.js
module.exports = {
// ...
// Override the default datastore settings in production.
datastores: {
default: {
// No need to set `adapter` again, because we already configured it in `config/datastores.js`.
url: 'mysql://lkjdsf4a23d9xf4:kkwer4l8adsfasd@u23jrsdfsdf0sad.aasdfsdfsafd.us-west-2.ere.amazonaws.com:3306/ke9944a4x23423g',
}
},
// ...
};
接続URLは、単一の設定キーを交換することで変更できるため、本番環境で真価を発揮します。これにより、本番環境の設定が理解しやすくなるだけでなく、環境変数(sails_datastores__default__url
)を設定するだけで、本番環境のデータベース資格情報を交換することもできます。これは、機密性の高いデータベース資格情報をバージョン管理システムでのコミットとして不朽にすることを避けるための便利な方法です。
SailsのORMであるWaterlineには、あらゆる種類のデータストアをサポートするための明確に定義されたアダプターシステムがあります。Sailsコアチームは、MySQL、PostgreSQL、MongoDB、ローカルディスクの公式アダプターを保守しています。また、Oracle、DB2、MSSQL、OrientDBなどのデータベース用のコミュニティアダプターが多数存在します。
サポートされているデータベースアダプターの最新リストはこちらで確認できます。
データベースのアダプターが見つからない場合は、カスタムアダプターを作成することもできます。または、既存のアダプターを変更/更新する場合は、メンテナーに連絡してください。(サポートが必要ですか?追加のリソースについては、こちらをクリックしてください。)
同じアダプターまたは異なるアダプターを指す複数のデータストアを設定できます。
たとえば、MySQLをプライマリデータベースとして使用しているが、既存のJavaまたはPHPアプリからのデータを含む2番目のMySQLデータベースと統合する必要があるかもしれません。一方、数か月前のプロモーションキャンペーンから残った3番目のMongoDBデータベースと統合する必要があるかもしれません。
config/datastores.js
を次のように設定できます。
// config/datastores.js
module.exports.datastores = {
default: {
adapter: require('sails-mysql'),
url: 'mysql://root@localhost:3306/dev',
},
existingEcommerceDb: {
adapter: require('sails-mysql'),
url: 'mysql://djbluegrass:[email protected]:3306/store',
},
q3PromoDb: {
adapter: require('sails-mongo'),
url: 'mongodb://djbluegrass:[email protected]:27017/promotional',
}
};
注:データストアが特定のアダプターを使用している場合、モデルが実際に使用しているかどうかに関係なく、そのアダプターを共有するすべてのデータストアが
sails lift
でロードされます。上記の例で、datastore: 'existingEcommerceDb'
でモデルが定義されている場合、実行時にWaterlineは2つのMySQL接続プールを作成します。1つはexistingEcommerceDb
用で、もう1つはdefault
用です。この動作のため、config/datastores.js
で使用していない「願望的な」データストア構成をコメントアウトまたは削除することをお勧めします。
一般的な経験則
config/datastores.js
のdefault
キーを編集します(または、資格情報をチェックインしたくない場合はconfig/local.js
を使用します)。config/env/production.js
を使用します(または、資格情報をチェックインしたくない場合は環境変数を設定します)。datastore
を設定します。config/datastores.js
およびconfig/env/production.js
ファイルに加えて、環境変数、コマンドラインオプションなど、Sailsで他のものを設定するのと同じ方法でデータストアを設定できます。