Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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!

like image 494
ius Avatar asked Jun 20 '13 11:06

ius


3 Answers

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"
    } 
}
like image 120
ius Avatar answered Nov 20 '22 18:11

ius


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'));

like image 44
Aurélien Thieriot Avatar answered Nov 20 '22 17:11

Aurélien Thieriot


If none of these solutions worked, check my solution.

Make sure that the sub directories of your directory are added to your Git repository.

like image 9
hetelek Avatar answered Nov 20 '22 19:11

hetelek