2016-10-20 7 views
0

シナリオ:私のノードアプリケーションは、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

私は、ライブラリコンパイルが現在の環境に結びついているものを書き込むため、別の環境に移動した場合、期待どおりに動作しないためです。

ターゲットマシンでライブラリを再構築すると、すべてがスムーズに機能します。

だからここに私のブレーンストーミングが来る:

  1. 私はすべてのデプロイにターゲットマシン上でそのモジュールをインストールする必要がありますか? CIではなくターゲットマシンにアプリケーション全体をインストールする必要があります(これは私には正しいとは思われません)。

  2. グローバルに環境固有のもの(npm install node-argon2 -g)をビルドし、それをアプリケーションディレクトリにリンクする必要がありますか?

  3. ターゲットマシン上で動作するように、そのcライブラリのコンパイルを修正する必要があります(その方法はわかりません)。

私がやっていることでベストプラクティスを完全に欠いているかどうかを知りたいと思います。

ありがとうございました!

+0

これは、 'node-argon2'が' -march = native'でビルドされ、あらかじめパッケージ化されていないターゲットマシンでコンパイルされるためです。それをフォークしてビルドフラグを編集することもできますが、それはすべてのマシンで最大のパフォーマンスを得るための方法です。 (免責事項:私は著者です) – ranisalt

答えて

0

Dockerを使用してアプリケーションをパッケージ化することを検討してください。 Dockerを持つコンテナ化ノードは信じられないほどeasyです。

これに取り組みたくない場合は、すべての展開でnpmパッケージを再インストールすることを検討する必要があります。これは最も信頼性の高い方法です。

関連する問題