Deploy Nodejs on Heroku fails serving static files located in subfolders
I'm deploying a NodeJs application using Heroku. Everything works fine except a little issue serving static files.
I have the following configuration
app.use(express.static(__dirname + '/htdocs'));
It works fine except when I try to serve static files located in sub folders.
www.example.com/bar.js // this serves the file /htdocs/bar.js
www.example.com/foo/bar.js // this can't find the file /htdocs/foo/bar.js
I forgot to say that on my local environment everything works fine, might be something with heroku but I can't find the reason. Did someone had this problem before? Solutions?
Thanks!
Finally I found the solution.
I solved that just adding the npm version in my package.json.
{
"name": "bla",
"version": "0.0.1",
"dependencies": {
"express": "3.2.6"
},
"engines": {
"node": "0.10.11",
"npm": "1.2.25"
}
}
Apparently, as explain in this question: Heroku(Cedar) + Node + Express + Jade Client-side javascript files in subdirectory work locally with foreman+curl but not when pushed to Heroku, you can't use __dirname with Heroku.
The alternative seems to be:
// At the top of your web.js
process.env.PWD = process.cwd()// Then
app.use(express.static(process.env.PWD + '/htdocs'));
If none of these solutions worked, check my solution.
Make sure that the sub directories of your directory are added to your Git repository.
I solved the problem in my case by removing the public folder from the .gitignore file. I don't know what it was doing there.