Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Heroku Cannot GET /

I am new to Heroku and believe I am following all of the steps outlined on Heroku's website to deploy via node.js – https://devcenter.heroku.com/articles/getting-started-with-nodejs – but despite indications of success, I only see this in the browser when I go to my newly-generated herokuapp.com site.

Cannot GET /

No errors when executing

git push heroku master

My Procfile is simply

web: node app.js

I dont quite understand dynos yet, but there seems to be one running:

heroku ps === web (1X): node app.js web.1: up 2014/07/03 23:55:00 (~ 18m ago)

Then:

heroku open Opening APP-NAME... done

But https://APP-NAME.herokuapp.com/ just displays the Cannot GET / message.

like image 204
bullcitydave Avatar asked Jul 04 '14 04:07

bullcitydave


3 Answers

I had my dist directory included in my .gitignore file so I was not committing dist to my repo and not pushing it to Heroku. Therefore, Heroku could not find any content to serve.

I updated my .gitignore, committed, and pushed, and my app shows up just fine on Heroku now.

like image 72
bullcitydave Avatar answered Oct 20 '22 08:10

bullcitydave


almost 3 years, but I'm answering for reference.

  • generally /dist is a build process generated directory, it's temporary and changes a lot while working in our sources, so /dist is not versioned.
  • on your package.json you can add a script called postinstall with this build process, let's say you have a task in gulp called build...so "postinstall": "gulp build"
  • if you manage your project's dependencies in bower too, npm install --save bower and "postinstall": "./node_modules/bower/bin/bower install && gulp build"

Just a simple example croped for your package.json

{
   "dependencies: {
    "bower":"^1.8.0",
    "grunt":"^1.0.1",
   },
   "scripts": {
    "start": "node ./www.js",
    "build": "grunt dist",
    "postinstall": "./node_modules/bower/bin/bower install && npm run build"
   }
}

Obvious you're probably done and better nowadays...I'm just referencing it for next consultings.

like image 8
diegolameira Avatar answered Oct 20 '22 10:10

diegolameira


Make sure you have these 2 things in place:

  1. In your package.json, include heroku-postbuild line, in my case is like this, (it might change if you need to do more than one install)
        "scripts": { 
        "heroku-postbuild": "npm install --prefix client && npm run build --prefix client"
      },
  1. In your index.js file, add a condition for production
    if (process.env.NODE_ENV === "production") {
      app.use(express.static("build"));
      app.get("*", (req, res) => {
        res.sendFile(path.resolve(__dirname,  "build", "index.html"));
      });
    }

Express will serve up production assets like our main.js file, or main.css file

Finally- Express looks if the request is for an asset Express will serve up the index.html file if it doesn't recognize the route

like image 6
Roberto Rodriguez Avatar answered Oct 20 '22 08:10

Roberto Rodriguez