2013-10-13 21 views
32

Ứng dụng Nút của tôi đang chạy tốt tại địa phương, nhưng đã gặp lỗi khi triển khai vào Heroku. Ứng dụng sử dụng Sequelize trong thư mục /models, chứa index.js, Company.jsUsers.js. Tại địa phương, tôi có thể nhập các mô hình sử dụng đoạn mã sau vào /models/index.js:Heroku + Nút: Không thể tìm thấy lỗi mô-đun

// load models 
var models = [ 
    'Company', 
    'User' 
]; 
models.forEach(function(model) { 
    module.exports[model] = sequelize.import(__dirname + '/' + model); 
}); 

này hoạt động tốt, tuy nhiên, khi tôi triển khai đến Heroku treo ứng dụng với các lỗi sau:

Error: Cannot find module '/app/models/Company' 
    at Function.Module._resolveFilename (module.js:338:15) 
    at Function.Module._load (module.js:280:25) 
    at Module.require (module.js:364:17) 
    at require (module.js:380:17) 
    at module.exports.Sequelize.import (/app/node_modules/sequelize/lib/sequelize.js:219:24) 
    at module.exports.sequelize (/app/models/index.js:60:43) 
    at Array.forEach (native) 
    at Object.<anonymous> (/app/models/index.js:59:8) 
    at Module._compile (module.js:456:26) 
    at Object.Module._extensions..js (module.js:474:10) 
Process exited with status 8 

Ban đầu Tôi nghĩ rằng đó là do trường hợp nhạy cảm (địa phương mac vs heroku linux), nhưng tôi di chuyển các tập tin, thực hiện một cam kết git, và sau đó di chuyển trở lại và cam kết một lần nữa để đảm bảo Company.js được viết hoa trong kho git. Điều này không giải quyết được vấn đề và tôi không chắc vấn đề có thể là gì.

Trả lời

60

Vấn đề là do phân biệt chữ hoa chữ thường và tên tệp. Mac OS X là trường hợp không nhạy cảm (nhưng nhận thức) trong khi Heroku dựa trên Linux và phân biệt chữ hoa chữ thường. Bằng cách chạy heroku run bash từ thiết bị đầu cuối của tôi, tôi đã có thể thấy cách thư mục /models xuất hiện trên hệ thống tệp của Heroku. Giải pháp là đổi tên User.jsCompany.js trên hệ thống cục bộ của tôi thành tệp tạm thời mới, cam kết thay đổi thành git, sau đó đổi tên lại thành User.jsCompany.js lưu ý đến chữ cái viết hoa đầu tiên rồi cam kết thay đổi một lần nữa qua git. Trước đây, tôi đã cố gắng đổi tên các tệp trực tiếp từ user.js thành User.jscompany.js thành Company.js nhưng các thay đổi về tên tệp và phân biệt chữ hoa chữ thường không phản ánh trên Heroku.

+0

Vui mừng đã giúp, công việc tốt đẹp! – dankohn

+3

Thám tử làm việc tốt. – WildService

+1

Tôi đã có cùng một vấn đề này và đã cố gắng tìm ra nó trong thời gian dài nhất. Cảm ơn bạn và hơn @dankohn! –

20

Tôi không thể nhìn thấy bản sửa lỗi chính xác, nhưng bạn có thể tự mình tìm ra bằng cách chạy heroku run bash để đăng nhập vào trường hợp Heroku, sau đó chạy node để nhập REPL và thử yêu cầu đường dẫn trực tiếp.

+0

Cảm ơn mẹo gỡ lỗi hữu ích này đã giúp tôi khắc phục sự cố. – surfearth

+1

cảm ơn, đã tiết kiệm rất nhiều thời gian :) – tom

0

Đối với tôi, đó là do một thư mục mà tôi đã vô tình đưa vào .gitignore!

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