2012-11-10 43 views
11

Tôi cố gắng để triển khai một Node.js đơn giản thể hiện dựa trên ứng dụng để Heroku, cái gì đó rõ ràng là rất cơ bản: https://devcenter.heroku.com/articles/nodejsFail để triển khai ứng dụng Node.js để Heroku

Dưới đây là package.json tôi:

{ 
    "name": "cours-lic3-blois", 
    "version": "0.0.1", 
    "private": true, 
    "scripts": { 
    "start": "node app" 
    }, 
    "dependencies": { 
    "express": "*", 
    "ejs": "*", 
    "github-flavored-markdown": "*", 
    "less-middleware": "*" 
    }, 
    "engines": { 
    "node": "0.8.8", 
    "npm": "1.1.65" 
    } 
} 

Khi tôi git push heroku master tôi đã nhận các dấu vết sau:

-----> Heroku receiving push 
-----> Node.js app detected 
-----> Resolving engine versions 
     Using Node.js version: 0.8.8 
     Using npm version: 1.1.65 
-----> Fetching Node.js binaries 
-----> Vendoring node into slug 
-----> Installing dependencies with npm 
     npm ERR! Error: ENOENT, chmod '/tmp/build_1suuxlhd9s8n6/node_modules/express/bin/express' 
     npm ERR! If you need help, you may report this log at: 
     npm ERR!  <http://github.com/isaacs/npm/issues> 
     npm ERR! or email it to: 
     npm ERR!  <[email protected]> 

     npm ERR! System Linux 2.6.32-348-ec2 
     npm ERR! command "/tmp/node-node-tonf/bin/node" "/tmp/node-npm-NG88/cli.js" "rebuild" 
     npm ERR! cwd /tmp/build_1suuxlhd9s8n6 
     npm ERR! node -v v0.8.8 
     npm ERR! npm -v 1.1.65 
     npm ERR! path /tmp/build_1suuxlhd9s8n6/node_modules/express/bin/express 
     npm ERR! code ENOENT 
     npm ERR! errno 34 
     npm ERR! 
     npm ERR! Additional logging details can be found in: 
     npm ERR!  /tmp/build_1suuxlhd9s8n6/npm-debug.log 
     npm ERR! not ok code 0 
    !  Failed to rebuild dependencies with npm 
    !  Heroku push rejected, failed to compile Node.js app 

To [email protected]:fast-everglades-2007.git 
    ! [remote rejected] master -> master (pre-receive hook declined) 
error: failed to push some refs to '[email protected]:fast-everglades-2007.git' 

tôi cố gắng để tinh chỉnh các phiên bản khác nhau trong package.json của tôi, nhưng không có kết quả. Tôi đang phát triển trên các cửa sổ và nó có thể là vấn đề này ENOENT là do một số vấn đề filemode.

+0

Hãy thử lại. Các kho lưu trữ npm ném các lỗi này đôi khi ngay cả khi bạn chạy từ một môi trường địa phương – almypal

+1

Tôi đã thử nhiều lần liên tiếp đó là lý do tại sao tôi hỏi câu hỏi. Sẽ thử lại ... – insitu

Trả lời

16

tôi đã cố định này bằng cách:

  • Đảm bảo Procfile cam kết vào git

  • Loại bỏ các node_modules/thư mục và cam kết rằng vào git (git rm -r node_modules /)

Sau đó, tôi đã làm git đẩy master master rồi lỗi biến mất.

+5

Điều này đã sửa nó cho tôi và thêm node_modules/vào .gitignore –

+1

+1 cho Arbie, +1 đến @WindUpToy – CjCoax

+0

Điều này đã hiệu quả đối với tôi. Tôi cũng phải chạy "npm install -g express-generator" và chạy "express". để tạo ra một tập tin package.json –

9

Tôi có vấn đề này, và đó là vì:

  1. tôi giữ node_modules trong điều khiển phiên bản
  2. tôi đã bin trong tập tin .gitignore tôi

npm đã cố gắng để chmod express/bin/express, nhưng do .gitignore tệp này không có trong git và do đó không được nhân bản trong quá trình triển khai nên không thành công. Tôi đã không nhận thấy nó vì cài đặt npm cục bộ sẽ tạo tệp bin/express như bình thường.

Xóa bin khỏi .gitignore và cam kết các tệp bị thiếu đã giải quyết được sự cố cho tôi.

+1

Đối với tôi đó là tôi đã có * node_modules * trong .gitignore. – Henrik

3

Nhóm Heroku, bạn có thể vui lòng xem xét định cấu hình npm để sử dụng npm install --no-bin-links --production theo mặc định hoặc tạo biến môi trường để cho phép người dùng đặt cờ đó. Đây là một lỗi nghiêm trọng trong cài đặt nút. Việc xóa thư mục bin khỏi tệp .gitignore của tôi (như được đề xuất bên dưới) cho phép tôi triển khai, nhưng nó phá vỡ bằng cách sử dụng git một cách hiệu quả trong môi trường phát triển đa nền tảng, yêu cầu xây dựng lại npm rõ ràng trên mỗi git pull nơi node_modules có thể đã thay đổi.

Thực hành tốt nhất của NPM là tránh có node_modules trong .gitignore (xem http://www.futurealoof.com/posts/nodemodules-in-git.html).

Tôi tin rằng --no-bin-links sẽ cung cấp tốt nhất của cả hai thế giới, cho phép triển khai các node_modules trong đó thư mục bin đã bị loại trừ, hỗ trợ xây dựng lại npm, nhưng không thất bại khi tạo liên kết bin.

Tôi đã gửi một yêu cầu kéo ở đây: https://github.com/heroku/heroku-buildpack-nodejs/pull/33

Cảm ơn!

+0

Is --no-bin-links có thực sự hữu ích không? Tôi đang thử nghiệm với việc kiểm tra trong node_modules vào git (không bao gồm các thư mục bin) và tôi đang chạy vào cùng một vấn đề ngay cả cục bộ (cuối cùng muốn triển khai đến beanstalk) –

0

vấn đề tương tự đã được khắc phục bằng cách đổi tên gruntfile.js thành Gruntfile.js

Các vấn đề liên quan