2012-04-28 13 views
9

'a itildiğinde değil Ben düğüm ve heroku için çok yeni ve bu bir tür basit izin olduğundan şüpheleniyorum sorun vb, ama onu takip edemiyorum.Heroku (Sedir) + Düğüm + Express + Yeşim İstemci tarafında javascript dosyaları yerel olarak foreman + curl ile çalışır, ancak Heroku

benim web.js dosyası oturuyor benim kök dizininde altına alt dizin bir düzey birkaç saf javascript dosyaları var. Benim web.js bir çizgi ben Heroku Foreman'la yerel benim app çalıştırırsanız dizini

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

belirtmek dosyası var ben şu bukle komutunu çalıştırdığınızda ben js beklenen yanıt almak

curl localhost:5000/heatcanvas/heatcanvas.js 

: Ben Heroku için itmek ve tarayıcıda corresponsing canlı url isabet Ancak zaman

www.example.com/heatcanvas/heatcanvas.js 

aşağıdakileri almak

Cannot GET /heatcanvas/heatcanvas.js 

Ben Firebug ve/veya ben aslında pathing lokal yapılıyor eşleşmelidir rağmen bu dosyalar için 404 hataları alıyorum bkz Heroku günlükleri kontrol edin. Sorun siteme komut dosyası etiketi noktalarının src niteliği olduğunu sadece zaman da gayet buraya geliyor javascript üçüncü parti belirtmekte yarar var, öyle. Komut dosyalarının kullanılabilir olmasını sağlamak için ne yapmam gerekiyor?

+2

Hiçbir zaman ayrıntılara bakmadım, ama biliyorum ki, Heroku'daki Rails'te, statik varlıklarınızı kök/halka haline getirdiniz/derlersiniz. Örneğin Rails,/public/base.sass 'öğesini/public/stylesheets/base.css' ile derler. Bu yüzden Heroku'nun 'public' dir'in statik erişilebilir bir dir olarak ortaya çıktığını düşünüyorum. Genelde alışılmış PHP uygulamalarında alışkın olduğunuz gibi üretim sunucularında rastgele dosyalara erişemezsiniz. Aslında bu heatcanvas.js dosyasını çalıştıran bir GET rotası belirtmeniz gerekir - ancak bunu yapmak istemezsiniz. Gerçekten çok paslıyım ama belki de 'public' dir'i kullanmaya çalışıyorum. [Cedar yığını] üzerinde – danneu

+1

(https://devcenter.heroku.com/articles/cedar) istekleri Dyno iyonize-rahatsız yönlendirilir. Bu yüzden statik varlıklara hizmet etmek için uygulama/çerçeveye kalmış. 'Public' dizini ile ilgili özel olan tek şey, Rails uygulamasının/çerçevesinin oradaki varlıklara hizmet etmesidir. Node.js uygulamaları farklı yapıya sahip olacak. –

+0

Eğer Heroku bu istekleri biri sırasında -t' kaydeder 'çıktısını da dahil olmak misiniz? –

cevap

6

Sana

kolayca dosyalarına erişmenizi sağlar senin web.js en başında belirli dizini

process.env.PWD = process.cwd() 

almak için process.cwd() değeri kullanmak önerilir. (Heroku web.js yürütülür web.js kök dizininde web.js yürütmek emin olun:

yerine

__dirname 

Uyarı kullanmanın

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

yapabilirsiniz bu yolla)

+1

Teşekkürler, bu bana çok yardımcı oldu!OP'nin aynı kurulumu yapıp yapmadığından emin değilim, fakat birkaç dynos ile Heroku çalıştırıyorum ve 'app.use (... __dirname +'/yol ') kullanamazsınız, çünkü yerel olarak yaptığım gibi . Bunun yerine 'process.env.PWD' kullanmalısınız. – Gromix

+0

Göründüğü gibi, bu benim için çalışmıyor! Heroku her zaman "app" adlı bir klasörü önceden ekler, bu yüzden server.js'm (root olarak) "app" adlı bir klasörde olduğunu düşünür. Yerel olarak test etmek iyi. – Pille

+0

Aynı durumda iam Pille Bu uygulama varsayılan klasör olaylarını bu kapsamda nasıl düzelttiniz (yerel her zaman benim için de tamamdır) – dewelloper