2012-09-25 49 views
2

我正在將一個node.js應用程序部署到Cloudfoundry,唯一的模塊依賴關係已被解析。我試着用我的本地node_modules目錄推,並在stdout.log也使用cloudfoundry.json NPM拆封和「ignoreModules」,但總是最後這一點:在Cloudfoundry'無效的ELF標題'上申請'

{ stack: [Getter/Setter], 
    arguments: undefined, 
    type: undefined, 
    message: '/var/vcap/data/dea/apps/myapp-0-6f9cf62f9bbe58f5d2eb13a94acb5d3a/app/node_modules/restify/node_modules/dtrace-provider/build/Release/DTraceProviderBindings.node: invalid ELF header' } 

任何想法?感謝提前:)

編輯:對不起,我的意思是「忽略* 節點 *模塊」

回答

2

我的猜測是在模塊編譯爲本地架構(比如86),並且服務器嘗試運行它是一個不同的架構(比如64位)。節點模塊可以在其中包含C++擴展,npm將處理構建,您不一定只需將node_modules文件夾中的二進制文件從一個平臺移動到另一個平臺,則需要重新編譯它們。

我不太瞭解Cloudfoundry,告訴你怎麼做,但希望別人有更好的答案。

+0

這是我第一次想到當我看到'無效ELF頭',但後來我用npm shrinkwrap和ignoreModules來避免上傳我的本地二進制文件,但得到了同樣的錯誤。 – Stinomus

+1

您是否可以嘗試在不使用node_modules文件夾的情況下推送它,以確保它不仍然嘗試使用您的本地編譯版本而不是使用ignoreModules? – PherricOxide

+2

優秀,thx!事實證明,我不得不實際刪除node_modules文件夾,我用{'「ignoreNodeModules」:true'來計算cloudfoundry.json足以忽略本地二進制文件:S – Stinomus

0

我有一個類似的問題,設置一個開發Docker環境。我想將我的源文件安裝在docker鏡像上,但是隻爲docker鏡像編譯了一個node_modules目錄。當我在Docker鏡像上創建了一個新目錄npm install,然後在我的一些源代碼中使用了軟鏈接時,我看到了相同的行爲。

解決方案:不要使用軟鏈接。