I’ve been interested in Node.JS for quite some time now but I haven’t really realized its potential or find a use case. The
extent of my experience was basically creating a quick Express.JS app and see it run in the browser. No formal development whatsoever.
I have come across Sails.JS in the past but that’s when Node was just in its early stages, or at least before I was interested
in the platform. Sails.js coincides with or sits on top of Express.JS using the same MVC pattern as Rails.
I watched the introduction video again for Sails.JS today and was amazed at how powerful it is. The ease at creating a Model, JSON API
end point and by default and Socket IO are the main selling points for me. At the moment, there’s not a whole lot of examples in the
web so I’m going to share a few things that I’ve learned regarding the framework.
According to the Sails.JS documentation, the implementation is very similar to Rails and if you understand how MVC works, it should be easy
to decipher the code in their documentation. The way queries are made is functional in nature which I like but the best part of all these is that
After doing an install via NPM, I began to do some research on what the deployment strategy can be. Since I’m still new to Git and Heroku, I
picked up a few commands that are integral to the Sails.JS and Heroku deployment workflow (setting up Git in any case).
Set global GitHub config.
$ git config --global github.user your_user_name
Create new Git repo and commit.
$ cd project_name && git init && git add . && git commit
Get the remote projects.
$ git remote -v
Push latest commit to Heroku.
$ git push heroku master
Create a project (within the project directory).
$ heroku create
or$ heroku create app_name`
Authenticate with Heroku server.
$ heroku login
Add your public key to Heroku.
$ heroku keys:add .ssh/id_rsa.pub
Add key automatically.
$ heroku keys:add
Get all projects in Heroku.
$ heroku list
Open the Heroku app in the browser.
$ heroku open
$ heroku log
Heroku issues on deployment
The two main issues that I’ve encountered while deploying are highlighted below. The application immediately throws a generic error
in which I have to use the command heroku logs to inspect the events.
H14 No web processes running. This is the error that shows when the web dynos is set to 0. Fixing it is a matter of scaling it
to 1 according to the Error Codes page.
$ heroku ps:scale web=1
Immediately after issuing that command, I was faced with another issue in which it complains about a non-existent web type.
No such type as web. This issue took me a while to figure out and after doing some research, I resolved it by adding a "Procfile"
to the root of my Sails JS application with the following code.
web: node app.js
Changing the /config/application.js to a port that Heroku understands (1337 being the default).
port: process.env.PORT || 1337,
After making those changes and issuing a git push heroku master, I had to issue the heroku ps:scale web=1 once again after the changes
has been formally deployed to Heroku.
Pushing to GitHub and Heroku repo simultaneously
Another helpful strategy is instead of issuing a separate git push
Github is to push it all at once. The .git/config can be modified to do this.
[remote "heroku"] url = firstname.lastname@example.org:<heroku_repo>.git fetch = +refs/heads/*:refs/remotes/heroku/* [remote "github"] url = email@example.com:<github_username>/<github_project>.git fetch = +refs/heads/*:refs/remotes/github/* [remote "all"] url = firstname.lastname@example.org:<github_username>/<github_project>.git url = email@example.com:<heroku_repo>.git fetch = +refs/heads/*:refs/remotes/origin/*
After the SSH keys has been added to Heroku and Github (see GitHub and
Heroku documentations on generating a new key), everything is working great.
I also realized that you only need a single key for both accounts.
Many hours after setting up the source control environment later is when learning Sails JS/Node and fun begins.