Sails v0.12では、Socket.ioとExpressのアップグレードに加え、多くのバグ修正とパフォーマンスの強化が行われています。このバージョンはSails v0.11とほぼ後方互換性があることが期待されますが、sails.sockets.*メソッドにいくつかの大きな変更があり、アプリケーションに影響を与える可能性があります。これらの変更については、以下の移行ガイドで説明しているので、v0.11から既存のアプリケーションをアップグレードしていてsails.socketsメソッドを使用している場合は、以下の情報を注意深くお読みください。それらの変更を除けば、既存のプロジェクトでsails liftを実行するだけで動作するはずです。
以下のセクションでは、変更点の概要、主要なバグ修正、機能強化と新機能、およびv0.11.x Sailsアプリをv0.12にアップグレードする方法に関する基本的なチュートリアルを示します。
Sailsアプリのルートディレクトリから次のコマンドを実行してください。
npm install sails@~0.12.0 --force --save
--forceフラグは、node_modules/フォルダにインストールされている既存のSails依存関係をSails v0.12の最新の修正リリースで上書きし、--saveフラグはpackage.jsonファイルを更新して、将来のnpmインストールでも新しいバージョンを使用するようにします。
socket.io-redisアダプターを使用している場合は、バージョン1.0.0以上にアップグレードしてください(npm install --save socket.io-redis@^1.0.0)。assets/js/dependencies/sails.io.js)をフロントエンドで使用している場合は、最新バージョンもインストールしてください(sails generate sails.io.js --force)。変更点の完全なリストについては、Sails、Waterline、sails-hook-sockets、およびsails.io.jsの変更ログファイルを参照してください。
sails.getRouteFor()メソッドとsails.getUrlFor()メソッドを介してSailsコアに組み込まれるようになりました。sails.socket.*メソッドのマルチノードサポート(およびスケーラビリティ)が全体的に向上し、最新のSocket.ioアップグレードに関連する追加の調整と改善が行われました。socket.io-redisの上に配置される、より緊密なRedis統合を追加し、追加のソケットクライアントではなく、Redisクライアントを使用してサーバー間通信を実装しました。sails.socket.*メソッドのAPIをクリーンアップし、オーバーロードされた関数を正規化し、マルチサーバー展開で問題を引き起こすメソッドを非推奨としました(詳細は下記参照)。.leaveAll()、.addRoomMembersToRooms()、および.removeRoomMembersFromRooms()。sails.sockets.id()はsails.sockets.getId()になりました(非推奨メッセージと後方互換性があります)。sails.io.js(JavaScript Sailsソケットクライアント)で生成されるようになりました。このアップグレードには、最新バージョンのsocket.io-clientと、より高度な機能(すべての仮想ソケットリクエストに共通ヘッダーを指定する機能など)が含まれています。grunt-contrib-*依存関係を最新の信頼できるバージョンにアップグレードしました(多くのNPM非推奨警告を排除し、NPMからのより良いエラーメッセージを提供します)。sails newを実行すると、新しいアプリの初期依存関係のシンボリックリンクを作成する代わりに、npm installが実行されるようになりました。これは従来よりも遅いかもしれませんが、NPMがネストされた依存関係を処理する方法の変更による必要な変更です。コアメンテナーはより良い長期的な解決策に取り組んでいますが、その間、頻繁にsails newを実行していて速度低下が気になる場合は、一時的に以前のバージョンのNPM(v2.x)にダウングレードすることを検討してください。インストールされているNPMのバージョンが3より前の場合、Sailsは従来のシンボリックリンク戦略を引き続き利用します。間違いなく、Sails v0.12における最大の変更点は、socketsフックによって公開される低レベルのsails.socketsメソッドのAPIです。Sailsアプリがマルチサーバー(別名「マルチノード」または「クラスタ化された」環境)で完璧に動作することを保証するために、いくつかの低レベルメソッドが非推奨となり、新しいメソッドがいくつか追加されました。
次のsails.socketsメソッドは非推奨になりました。
アプリケーションでこれらのメソッドを使用している場合、v0.12でも機能しますが、できるだけ早く置き換える必要があります。次のバージョンでSailsから削除される可能性があります。詳細については、各メソッドの個々のドキュメントページを参照してください。
.subscribers()リソースフルなPubSubメソッドは、sails.sockets.subscribers()と同じ理由で非推奨となりました。コードで使用している場合、このメソッドを置き換えるためのガイドラインについては、ドキュメントに従ってください。
Sails v0.12には、最新のWaterline ORM(v0.11.0)が含まれています。注意すべきAPIの変更点が2つあります。
.save()は、コールバックに2番目の引数を渡さなくなりました。.save()インスタンスメソッドのコールバックは、2番目の引数を受け取らなくなりました。2番目の引数を要求することは便利でしたが、特に数百万件のレコードを処理するアプリケーションでは、.save()のパフォーマンスを低下させました。この変更により、冗長なクエリを作成する必要がなくなり、データベースがそれらを処理する必要がなくなるため、これらの問題が解決されます。
アプリケーションに次のようなコードがある場合
sierra.save(function (err, modifiedSierra){
if (err) { /* ... */ return; }
// ...
});
次のように置き換える必要があります。
sierra.save(function (err){
if (err) { /* ... */ return; }
// ...
});
組み込みのcreatedAt属性とupdatedAt属性に、カスタム列名(つまり、Mongo/Redisユーザーの場合はフィールド名)を設定できるようになりました。これまでは、最上位のautoCreatedAtとautoUpdatedAtモデル設定をfalseに指定して、createdAtとupdatedAtの自動挿入を完全に無効にすることができました。それは従来どおりに機能しますが、これからはこれらの設定の1つまたは両方に文字列値を指定することもできます。文字列が指定されている場合、それは自動タイムスタンプに使用するカスタム列(/フィールド)名として理解されます。
{
attributes: {},
autoCreatedAt: 'my_cool_created_when_timestamp',
autoUpdatedAt: 'my_cool_updated_at_timestamp'
}
ここで@sgress454によって提案された回避策を使用していた場合は、代わりにこのより簡単な方法を利用することを検討してください。
Sails-PostgreSQLとSails-MySQLは、関連付けの移入時のパフォーマンスを大幅に向上させるパッチアップデートを受けました。@jianpingwがソースを掘り下げて、データベースレコードを何度も処理していたバグを発見したおかげです。これらのアダプターのいずれかを使用している場合、`[email protected]または[email protected]`にアップグレードすると、パフォーマンスが大幅に向上します。
技術的にはリリースの一部ではありませんが、Sails v0.12には、コントリビューターが利用できるツールとリソースの主要な改善が伴います。より多くのコアフックが完全に文書化されるようになりました(コントローラー|grunt|logger|cors|responses|orm)、そしてチームはSailsプロジェクトへの貢献のための行動規範を作成しました。
コントリビューターにとって最大の変更点は、更新された貢献ガイドであり、機能/機能強化の提案と、機能、機能強化、パッチをコアにマージするための新しい合理化されたプロセスが含まれています。Sailsフレームワークは(コードベースとユーザーベースの両方で)成長してきたため、問題への貢献、コードへの貢献、ドキュメントへの貢献がどのようにレビューされ、マージされるかについて、より明確なプロセスを確立する必要がありました。
このリリースには、公式リファレンスドキュメントの徹底的なクリーンアップと、https://sails.dokyumento.jp/documentationのオンラインドキュメントへのマイナーな使いやすさの改善も含まれています。Sails Webサイト全体が日本語で利用可能になり、韓国語、ブラジルポルトガル語、台湾標準中国語、スペイン語の4つの翻訳プロジェクトが進行中です。
さらに、Sails.jsプロジェクトには(ついに)公式ブログがあります。Sails.jsブログは、Sailsに関するすべての長編アップデートと発表、およびWaterline、Skipper、マシン仕様などの関連プロジェクトの新しい情報源です。
Sailsアプリをv0.12.0にアップグレードする際に予期しない問題が発生した場合は、貢献ガイドを確認し、Sails GitHubリポジトリに問題を提出してください。