2012-04-28 8 views
9

Tôi rất mới đối với nút và heroku và tôi nghi ngờ đây là một loại quyền đơn giản vấn đề vv, nhưng tôi dường như không thể theo dõi nó xuống.Heroku (Cedar) + Nút + Express + Jade Tệp JavaScript phía máy khách trong thư mục con làm việc cục bộ với quản đốc + curl nhưng không được đẩy vào Heroku

Tôi có một số tệp javascript thuần túy trong thư mục con một cấp bên dưới thư mục gốc của tôi nơi tệp web.js của tôi đang ngồi. Tôi có một dòng trong web.js tôi nộp để xác định thư mục

app.use('/heatcanvas',express.static(__dirname+'/heatcanvas')); 

Nếu tôi chạy ứng dụng của tôi tại địa phương với Heroku Foreman tôi nhận được phản ứng dự kiến ​​js khi tôi chạy curl lệnh sau

curl localhost:5000/heatcanvas/heatcanvas.js 

Tuy nhiên khi tôi đẩy để Heroku và nhấn url sống corresponsing trong trình duyệt

www.example.com/heatcanvas/heatcanvas.js 

tôi nhận được như sau:

Cannot GET /heatcanvas/heatcanvas.js 

Nếu tôi kiểm tra Firebug và/hoặc nhật ký Heroku tôi thấy tôi thực sự nhận được lỗi 404 cho những tệp đó mặc dù đường dẫn phải khớp với những gì đang được thực hiện cục bộ. Nó cũng đáng nói đến là bên thứ ba javascript là đến chỉ tốt, nó chỉ là khi thuộc tính src của thẻ script trỏ đến trang web của tôi rằng có một vấn đề. Tôi cần phải làm gì để có sẵn các tập lệnh của mình?

+2

Tôi chưa bao giờ xem xét chi tiết cụ thể, nhưng tôi biết rằng trong Rails trên Heroku, bạn đặt/biên dịch nội dung tĩnh của bạn vào thư mục gốc/công khai. Ví dụ, Rails biên dịch '/ assets/base.sass' thành'/public/stylesheets/base.css'. Vì vậy, tôi nghĩ Heroku cho thấy thư mục 'public' như một thư mục truy cập tĩnh. Bạn thường không thể truy cập các tệp tùy ý trên các máy chủ sản xuất như bạn có thể được sử dụng trong các ứng dụng PHP thông thường. Bạn phải chỉ định một tuyến GET thực sự phục vụ tệp heatcanvas.js đó - nhưng bạn sẽ không muốn làm điều đó. Tôi thực sự gỉ, nhưng có lẽ cố gắng sử dụng các thư mục 'public'. – danneu

+1

Trên yêu cầu [Cedar stack] (https://devcenter.heroku.com/articles/cedar) được chuyển đến dyno un-disturbed. Vì vậy, tùy thuộc vào ứng dụng/khung công tác để phân phát nội dung tĩnh. Đặc biệt duy nhất về thư mục 'public' là ứng dụng Rails/framework phục vụ các tài sản từ đó. Các ứng dụng Node.js sẽ có cấu trúc khác nhau. –

+0

Bạn có thể đưa đầu ra của 'nhật ký heroku -' vào một trong các yêu cầu này không? –

Trả lời

6

tôi khuyên bạn nên sử dụng process.cwd() giá trị để có được thư mục cụ thể

process.env.PWD = process.cwd() 

vào đầu rất của web.js bạn

phép bạn truy cập các tập tin một cách dễ dàng.

Bạn có thể làm

app.use('/heatcanvas',express.static(process.env.PWD+'/heatcanvas')); 

thay vì sử dụng

__dirname 

Cảnh báo: Hãy chắc chắn để thực hiện web.js tại thư mục gốc của web.js (web.js Heroku được thực hiện theo cách đó)

+1

Cảm ơn, điều này đã giúp tôi rất nhiều!Không chắc chắn nếu OP có cùng một thiết lập, nhưng tôi đang chạy Heroku với một số dynos, và nó quay ra bạn không thể sử dụng 'app.use (... __dirname + '/ path');', như tôi đã làm tại địa phương . Thay vào đó, bạn phải sử dụng 'process.env.PWD'. – Gromix

+0

Dường như, điều này không hiệu quả đối với tôi! Heroku luôn luôn nối thêm một thư mục có tên là "ứng dụng", vì vậy nó nghĩ rằng server.js của tôi (trong thư mục gốc) nằm trong một thư mục có tên là "ứng dụng". Thử nghiệm cục bộ là ok. – Pille

+0

iam trong tình trạng tương tự Pille làm thế nào bạn đã sửa sự kiện thư mục mặc định ứng dụng này trong phạm vi này (địa phương luôn luôn là ok cho tôi quá) – dewelloper