3

nodejitsu にデプロイした後に、hiredis のコンパイルの問題を修正するにはどうすればよいですか?

nodejitsu にデプロイした後、jistu logsコマンドから次のエラーを受け取りました。

ld.so.1: node: fatal: relocation error: file /opt/haibu/apps/<user>/<app>/package/node_modules/redis/node_modules/hiredis/build/Release/hiredis.node: symbol redisReaderCreate: referenced symbol not found
4

2 に答える 2

4

そのままでは機能しない理由は、redis パッケージには、redis コードを解析するために redis によって使用される C ライブラリであるhiredis がバンドルされているためです。

コードはサーバー上でコンパイルする必要があるため、Nodejitsu は C ライブラリがすぐに動作することを保証しません。また、開発環境と同じ方法で makefile を実行する保証もありません。

Pavel のソリューションでは、彼は CPPFLAGS および LD_OPTIONS 環境変数をオーバーライドし、それにより、hiredis ライブラリが強制的にコンパイルされます。残念ながら、これはパッケージが使用するその他の C ライブラリに悪影響を及ぼします。

次の方法でプロジェクトに redis をバンドルすることをお勧めします。

npm install hiredis
npm install redis
npm uninstall hiredis

Redis は、hiredis がインストールされていることを検出するため、依存関係としてインストールされません。次に、redis をインストールした後、hiredis を削除します。Redis は、少し遅い Javascript パーサーに自動的にフォールバックします (ただし、チームは改善に取り組んでいます)。

次に、バンドルされた依存関係に「redis」を追加します。

"bundledDependencies": ["redis"]

簡単jitsu deployに、準備完了です。

于 2012-08-21T22:26:31.607 に答える
1

以下をpackage.jsonに追加する必要がありました

"bundledDependencies": ["redis"]

https://npmjs.org/doc/json.html#bundledDependencies

オプションで、以下を package.json に追加してみてください

"env": {
    "CXX": "/opt/local/bin/g++ -m64",
    "CPPFLAGS": "-I/opt/local/include",
    "LD_OPTIONS": "-L/opt/local/lib -lsocket -lnsl",
    "PYTHON": "/opt/local/bin/python2.7"
}

webchat.jit.su thxで「blakmatrix_」と「@AvianFlu」から支援を受けました!

  • bundleddeps は、npm に deps をプロジェクトの残りの部分と一緒にパックするように指示します。通常、node_modules の何もパックされません。
  • ただし、バンドルされている dep 配列に dep 名を入れることで、パッケージ化時にその依存関係がアプリに含まれます。
  • たとえば、これを行うnpm i -dと、新しくインストールするのではなく、バンドル dep が使用されます
于 2012-08-21T19:12:58.487 に答える