user4279406
user4279406

Reputation:

Deploy and run grunt server on IBM bluemix

What changes do I have to make inorder to actually run a successful build and host my website on bluemix?

Right now, this is my Gruntfile.js, manifest.yml and package.json. The base folder 'app' is an Angular application -

     module.exports = function(grunt){
          grunt.initConfig({
            connect: {
              server: {
                options: {
                  port: 9000,
                  base: 'app',
                  keepalive: true,
                }
              }
            }
          });
          grunt.loadNpmTasks('grunt-contrib-connect');

          grunt.registerTask('default', ['connect']);
        };

package.json:

{
  "name": "dummy",
  "version": "1.0.0",
  "description": "",
  "main": "app.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {"grunt-cli": "^1.2.0",
    "grunt": "^0.4.5",
    "grunt-contrib-connect": "^0.10.1"
  }

}

manifest.yml:

---
applications: #Reference http://docs.cloudfoundry.com/docs/using/deploying-apps/manifest.html
- name: dummy #Application Name. Unique to the user's Space
  memory: 256M #The maximum memory to allocate to each application instance
  instances: 1 #The number of instances of the application to start
  path: ./ #Path to the application to be pushed
  command:  npm install && node_modules/.bin/grunt serve #The command to use to start the application

Upvotes: 0

Views: 671

Answers (1)

German Attanasio
German Attanasio

Reputation: 23705

Few suggestions when working with node applications and Bluemix:

  1. To start a node application it's recommended to use npm start and specify the script in the package.json.
  2. If your application needs to build assets, specify how to do that in the postinstall script in the package.json. For example if you are using Gulp and your main task is build you will have something like:

    "postinstall": "gulp build"
    
  3. When running in Bluemix VCAP_APP_HOST and VCAP_APP_PORT will have the host and port where your application will run.


The files below have the fixes mentioned above:

manifest.yml:

---
applications:
- name: dummy-kartik-yadav
  memory: 512M
  instances: 1
  path: .
  command: npm start

package.json:

{
  "name": "dummy",
  "version": "1.0.0",
  "description": "",
  "main": "app.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node_modules/.bin/grunt serve",
    "postinstall": "console.log('build ui assets like js, css, html...')"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "grunt-cli": "^1.2.0",
    "grunt": "^0.4.5",
    "grunt-contrib-connect": "^0.10.1"
  }
}

gruntfile.js:

module.exports = function(grunt){
  grunt.initConfig({
    connect: {
      server: {
        options: {
          port: process.env.VCAP_APP_PORT || 9000, # listen to the port that bluemix will assign you
          base: 'app',
          keepalive: true
        }
      }
    }
  });
  grunt.loadNpmTasks('grunt-contrib-connect');
  grunt.registerTask('default', ['connect']);
};

After doing the changes mentioned above, open the project folder and run npm start. If it works locally, it will in Bluemix.

Upvotes: 2

Related Questions