2013-06-20 11 views
15

Wdrażam aplikację NodeJs przy użyciu Heroku. Wszystko działa dobrze, z wyjątkiem niewielkiego problemu z plikami statycznymi.Wdrażanie Nodejs na Heroku kończy się niepowodzeniem w wyświetlaniu plików statycznych umieszczonych w podfolderach

mam następującą konfigurację

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

Współpracuje z wyjątkiem gdy próbuję służyć statycznych plików umieszczonych w folderach podrzędnych.

www.example.com/bar.js // służy plik /htdocs/bar.js

www.example.com/foo/bar.js // To nie może znaleźć złożyć /htdocs/foo/bar.js

zapomniałem powiedzieć, że w moim środowisku lokalnym wszystko działa dobrze, to może być coś z Heroku ale nie mogę znaleźć przyczyny. Czy ktoś wcześniej miał ten problem? Rozwiązania?

Dzięki!

Odpowiedz

12

W końcu znalazłem rozwiązanie.

Rozwiązałem to, dodając tylko wersję npm do mojego pliku package.json.

{ 
    "name": "bla", 
    "version": "0.0.1", 
    "dependencies": { 
     "express": "3.2.6" 
    }, 
    "engines": { 
     "node": "0.10.11", 
     "npm": "1.2.25" 
    } 
} 
+2

Nie rozwiązałem mojego problemu, wciąż szukając ... –

10

Najwyraźniej, jak wyjaśniono w tym pytaniu: Heroku(Cedar) + Node + Express + Jade Client-side javascript files in subdirectory work locally with foreman+curl but not when pushed to Heroku, nie można używać __dirname z Heroku.

Alternatywą wydaje się być:

// Na górze swoimi web.js
process.env.PWD = process.cwd()

// Następnie
app. use (express.static (process.env.PWD + '/ htdocs'));

+0

Hej! Już to znalazłem i nie działało ... Ale tak naprawdę znalazłem soultion już teraz !!! To był po prostu mój pakiet.json, zapomniałem wstawić wersję npm, nie wiem dlaczego, ale to rozwiązuje całą sprawę. Dzięki! – ius

+0

Oh ok. Dobre wieści ! –

+0

Zgaduję, że to dlatego, że Heroku potrzebuje go, aby pobrać odpowiednią wersję NPM. I domyślnie powinien pobrać bardzo stary.Nie wiemy, co by się wtedy wydarzyło :) –

0

Walczyłem z tym przez chwilę i musiał wrócić do używania/publiczny (z/dist) jako folder statycznej - doskonale współpracuje teraz

0

W moim przypadku, miałem etap w moim kompilacji to faktycznie wymazuje folder /public, a następnie dodaje z powrotem plik bundle.js i bundle.css.

Więc na moim lokalnym nie widziałem, ale kiedy został wdrożony do Heroku brakowało aktywów.

5

Jeśli żadne z tych rozwiązań nie zadziałało, sprawdź numer my solution.

Upewnij się, że podkatalogi katalogu zostaną dodane do repozytorium Git.

+2

to działało dla mnie. Ignorowałem katalog mój/dist w .gitignore. Usunąłem go, a statyczne łącza do plików działały zgodnie z oczekiwaniami. – mepler

+0

To samo dla mnie, teraz wiem co robi .gitignores: P – John