20

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!

ius
  • 1,511
  • 2
  • 15
  • 31

6 Answers6

14

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"
    } 
}
ius
  • 1,511
  • 2
  • 15
  • 31
10

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

Community
  • 1
  • 1
Aurélien Thieriot
  • 5,853
  • 2
  • 24
  • 25
  • Hey! I already found that and didn't worked... But I actually found the soultion right now!!! It was just my package.json, I forgot to put the npm version, I don't know why but this solves the whole thing. Thanks! – ius Jun 20 '13 at 12:50
  • I would guess it's because Heroku need it in order to download the right version of NPM. And by default it should download a very old one. We don't know what should have happened then :) – Aurélien Thieriot Jun 20 '13 at 14:53
  • I've added an npm version to package.json, AND did this solution. Still doesn't work. – Qasim Apr 05 '16 at 06:03
9

If none of these solutions worked, check my solution.

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

hetelek
  • 3,776
  • 5
  • 35
  • 56
1

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.

0

I struggled with this for a while and had to revert to using /public (from /dist) as the static folder - works perfectly now

0

In my case, I had a step in my build that was actually wiping out the /public folder, and then adding back in a bundle.js and bundle.css.

So on my local I didn't see it, but when it was deployed to Heroku the assets were missing.

Don P
  • 60,113
  • 114
  • 300
  • 432