4

I m trying to deploy my angularjs app on heroku. I followed the steps given by heroku. But when I m looking at the log I have this :

/app/app/scripts/app.js:3 2014-03-05T11:05:09.262151+00:00 app[web.1]: angular.module('angularuiprojectApp', [ 2014-03-05T11:05:09.262151+00:00 app[web.1]: ^ 2014-03-05T11:05:09.266533+00:00 app[web.1]: ReferenceError: angular is not defined 2014-03-05T11:05:09.266533+00:00 app[web.1]: at Object. (/app/app/scripts/app.js:3:1) 2014-03-05T11:05:09.266533+00:00 app[web.1]: at Module._compile (module.js:456:26) 2014-03-05T11:05:09.266533+00:00 app[web.1]: at Object.Module._extensions..js (module.js:474:10) 2014-03-05T11:05:09.266533+00:00 app[web.1]: at Module.load (module.js:356:32) 2014-03-05T11:05:09.266533+00:00 app[web.1]: at Function.Module._load (module.js:312:12) 2014-03-05T11:05:09.266533+00:00 app[web.1]: at Function.Module.runMain (module.js:497:10) 2014-03-05T11:05:09.266533+00:00 app[web.1]: at startup (node.js:119:16) 2014-03-05T11:05:09.266533+00:00 app[web.1]: at node.js:902:3 2014-03-05T11:05:09.742460+00:00 app[web.1]: /app/app/scripts/app.js:3

I don't understand why Heroku doesn't know about angular.

Here's the code of my app.js :

angular.module('angularuiprojectApp', [
  'ngCookies',
  'ngResource',
  'ngSanitize',
  'ngRoute','ui.bootstrap'
])
  .config(function ($routeProvider) {
    $routeProvider
      .when('/', {
        templateUrl: 'views/main.html',
        controller: 'MainCtrl'
      })
      .otherwise({
        redirectTo: '/'
      });
  });

My procfile content is :

web: node app/scripts/app.js

If you have any idea... Thank you in advance.

5 Answers 5

2

app.js is a file that configures AngularJS. It's not a web server like express. You need a web server to serve your Angular app. To do this create a new web.js file that starts a webserver serving your app or your dist directory.

You will need to install express and gzippo using npm to make this work.

Here is an example of web.js serving the app folder:

'use strict';

var gzippo = require('gzippo');
var express = require('express');
var nodeApp = express();

nodeApp.use(express.logger('dev'));
nodeApp.use(gzippo.staticGzip('' + __dirname + '/app'));
nodeApp.listen(process.env.PORT || 5000);

By the way, serving the app folder is not recommended, you should be serving the dist folder that is generated using the grunt command. Check out this buildpack I wrote to deploy angular apps on heroku, it will handle everything for you if you are using grunt and bower to build your app.

Sign up to request clarification or add additional context in comments.

1 Comment

great buildpack nknj! :)
2

Heroku has a problem reading CDN's with http in the address. So in your project, remove http from all your CDN urls.

For example:

If you have:

<pre>http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.2/angular.js"></pre>

Replace it with:

<pre>//cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.2/angular.js"></pre>

Comments

0

I had a node.js app working fine locally, but the angular wouldn't work on Heroku. I had to change this line in my index.html for heroku to load angular. I replaced

<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.10/angular.min.js"></script>

with

<script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.3/angular.min.js" type="text/javascript" charset="utf-8"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.3/angular-route.min.js" type="text/javascript" charset="utf-8"></script>

And it worked!

Update: It looks like the issue is with the 'http:' part of the src, not the initial link. Not sure why heroku cannot handle the http there, but just get rid of it.

Comments

0

if you remove the http part of the link, you allow the server to choose between http or https. This works for all CDN in general.

In general, I recommend this method ok link start with //whatever.com rather than http://whatever.combecause you never know when links will change to https or vice versa.

Comments

0

while hosting your angular js web application on heroku, the problem comes up with the CDN. Heroku has a problem to read the CDN with http

So, remove the http from your angular CDN and write it as

<script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.2/angular.js"></script>

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.