シナリオ:私のノードアプリケーションは、CI(npm install
およびnpm test
)でテストされ、ビルドされています。その後、node_modulesフォルダーと共にパッケージ化され、ターゲット環境にデプロイされます。CIまたはターゲットサーバ上にCライブラリを構築するノードモジュールをインストールする必要がありますか?
これまでのところとても良いです。
モジュールnode-argon2をインストールし、インストール時にnode-gypを使用してcライブラリを作成しました。 Cライブラリは現在CI(Amazon Linuxマシン)のnpm install
の間に構築され、アプリケーション全体がパッケージ化され、ターゲットサーバ(別のAmazon Linuxマシン)にデプロイされます。 node-argon2このエラーが発生すると、アプリケーションでエラーが発生するようになりました。Illegal instruction
。
私は、ライブラリコンパイルが現在の環境に結びついているものを書き込むため、別の環境に移動した場合、期待どおりに動作しないためです。
ターゲットマシンでライブラリを再構築すると、すべてがスムーズに機能します。
だからここに私のブレーンストーミングが来る:
私はすべてのデプロイにターゲットマシン上でそのモジュールをインストールする必要がありますか? CIではなくターゲットマシンにアプリケーション全体をインストールする必要があります(これは私には正しいとは思われません)。
グローバルに環境固有のもの(
npm install node-argon2 -g
)をビルドし、それをアプリケーションディレクトリにリンクする必要がありますか?ターゲットマシン上で動作するように、そのcライブラリのコンパイルを修正する必要があります(その方法はわかりません)。
私がやっていることでベストプラクティスを完全に欠いているかどうかを知りたいと思います。
ありがとうございました!
これは、 'node-argon2'が' -march = native'でビルドされ、あらかじめパッケージ化されていないターゲットマシンでコンパイルされるためです。それをフォークしてビルドフラグを編集することもできますが、それはすべてのマシンで最大のパフォーマンスを得るための方法です。 (免責事項:私は著者です) – ranisalt