Skip to content

Instantly share code, notes, and snippets.

@mdunisch
Last active July 13, 2023 14:51
Show Gist options
  • Save mdunisch/4a56bdf972c2f708ccc6 to your computer and use it in GitHub Desktop.
Save mdunisch/4a56bdf972c2f708ccc6 to your computer and use it in GitHub Desktop.
Get Sails.js running on Openshift

#How you get Sail.js running on Openshift#

This instruction is tested with:

  • Sails.js v0.9.16
  • Node.js 0.10 on Openshift ( 05 May 2014)

###1) package.json

If you use the package.json build by sails new Projectname than you have to add a few fields for openshift – so the server can start you app automatically. Sails uses Grunt to build minify css/js and so on. Openshift dont have grunt installed so you have to add this also.

See package.json for an example. The most important part for openshift:

"dependencies": {
    "grunt-cli": ">=0.1.13",
    "grunt": "~0.4.4",
    ...
"scripts": {
  "start": "node app.js",
  "debug": "node debug app.js"
 },
"private": true,
"main": "app.js" 

###2) config/local.js

In your Sailsconfig (config/local.js) you have to set Host, Port and Environment. See local.js. Example:

host: process.env.OPENSHIFT_NODEJS_IP || "127.0.0.1",
port: process.env.OPENSHIFT_NODEJS_PORT || 8080,
environment: process.env.NODE_ENV || 'development'

###3) .openshift/action_hooks/pre_start_nodejs

On your local machine you can start node app.js --prod if you want to start Sail.js in production-mode. On Openshift you have to create a “pre_start_nodejs”-File. This file is executed before your node-app starts. Here you can set the environment-mode. Also the build-in-grunt from sails dont work right so we manualy do a "grunt prod" befor starting node.

It’s simple:

  • Create a new file “pre_start_nodejs” (no file extension) in the folder “.openshift/action_hooks”
  • Insert the following code:
#!/bin/bash
export NODE_ENV=production

# If there is a grunt file, run $ grunt prod
if [ -f "${OPENSHIFT_REPO_DIR}"/Gruntfile.js ]; then
    (cd "${OPENSHIFT_REPO_DIR}"; node_modules/grunt-cli/bin/grunt prod)
fi

####4.) Git push

You you can make “git push” and enjoy your Sails.js!

module.exports = {
host: process.env.OPENSHIFT_NODEJS_IP || "127.0.0.1",
port: process.env.OPENSHIFT_NODEJS_PORT || 8080,
environment: process.env.NODE_ENV || 'development'
};
{
"name": "Sails-Sample-App",
"version": "1.0.0",
"description": "Sails.js Sample App",
"keywords": [
"OpenShift",
"Node.js",
"sailsj"
],
"author": {
"name": "mdunisch"
},
"engines": {
"node": ">= 0.10",
"npm": ">= 1.0.0"
},
"dependencies": {
"ejs": "0.8.4",
"grunt-cli": ">=0.1.13",
"grunt": "~0.4.4",
"optimist": "0.3.4",
"passport": ">=0.2.0",
"passport-facebook": ">=1.0.3",
"sails": ">=0.9.16",
"sails-disk": ">=0.9.0",
"sails-mongo": ">=0.9.8"
},
"scripts": {
"start": "node app.js",
"debug": "node debug app.js"
},
"devDependencies": {},
"bundleDependencies": [],
"private": true,
"main": "app.js"
}
#!/bin/bash
echo "Exporting Node Environment (production)"
export NODE_ENV=production
# If there is a grunt file, run $ grunt prod
if [ -f "${OPENSHIFT_REPO_DIR}"/Gruntfile.js ]; then
(cd "${OPENSHIFT_REPO_DIR}"; node_modules/grunt-cli/bin/grunt prod)
fi
@rschuetzler
Copy link

config/local.js is in .gitignore by default. How do I get that file up to OpenShift, since it won't be in my git repo?

@yayobyte
Copy link

Upload once and then add it to gititnore file again

@ramajd
Copy link

ramajd commented Mar 18, 2016

I got following error while using bower in my sails app:

DEBUG: Sending SIGTERM to child...
DEBUG: Running node-supervisor with
DEBUG:   program 'app.js'
DEBUG:   --watch '/var/lib/openshift/56eaf5c77628e1765b00007f/app-root/data/.nodewatch'
DEBUG:   --ignore 'undefined'
DEBUG:   --extensions 'node|js|coffee'
DEBUG:   --exec 'node'
DEBUG: Starting child process with 'node app.js'
DEBUG: Watching directory '/var/lib/openshift/56eaf5c77628e1765b00007f/app-root/data/.nodewatch' for changes.
Warning: connect.session() MemoryStore is not
designed for a production environment, as it will leak
memory, and will not scale past a single process.
** Grunt :: An error occurred. **
------------------------------------------------------------------------
Aborted due to warnings.
Loading "bower.js" tasks...ERROR
>> Error: EACCES, permission denied '/var/lib/openshift/56eaf5c77628e1765b00007f/.local'
Warning: Task "bower:dev" not found. 
------------------------------------------------------------------------
Looks like a Grunt error occurred--
Please fix it, then **restart Sails** to continue running tasks (e.g. watching for changes in assets)
Or if you're stuck, check out the troubleshooting tips below.
Troubleshooting tips:
 *-> Are "grunt" and related grunt task modules installed locally?  Run `npm install` if you're not sure.
 *-> You might have a malformed LESS, SASS, CoffeeScript file, etc.
 *-> Or maybe you don't have permissions to access the `.tmp` directory?
     e.g., `/var/lib/openshift/56eaf5c77628e1765b00007f/app-root/runtime/repo/.tmp` ?
     If you think this might be the case, try running:
     sudo chown -R 6204 /var/lib/openshift/56eaf5c77628e1765b00007f/app-root/runtime/repo/.tmp
Error: The hook `grunt` is taking too long to load.
Make sure it is triggering its `initialize()` callback, or else set `sails.config.grunt._hookTimeout to a higher value (currently 20000)
    at tooLong [as _onTimeout] (/var/lib/openshift/56eaf5c77628e1765b00007f/app-root/runtime/repo/node_modules/sails/lib/app/private/loadHooks.js:92:21)
    at Timer.listOnTimeout [as ontimeout] (timers.js:112:15) { [Error: The hook `grunt` is taking too long to load.
Make sure it is triggering its `initialize()` callback, or else set `sails.config.grunt._hookTimeout to a higher value (currently 20000)] code: 'E_HOOK_TIMEOUT' }

is there any solution using bower beside sails in openshift ?

@alexfin90
Copy link

I followed the guide and now the deploy is ok!
But all images styles and .js are not showed.
404 not found.
There is somenthing wrong with the .tmp folder on openshift???

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment