Skip to content
This repository has been archived by the owner on Mar 15, 2022. It is now read-only.

nerdyfactory/railsdotjs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

railsdotjs

railsdotjs is gem providing node.js environment in Rails applications, so that you don't need to keep seperate repository, take care of deployment or cron job for node application. Any suggestion of new features or bug reporting are appreciated.

Requirements

Installation

Add the following to your application's Gemfile:

gem 'railsdotjs'

and bundling application

$ bundle install

generating node working space

$ rails g rails_dot_js:install

now you can play with node stuff in app/nodejs directory

Usages

options

RailsDotJs has two options. using set_config and fetch_config methods, you can set and fetch the config values. If you will use default value of the option, you don't need to set the value

Option Description
:node_path name of the directory where node scripts are (default: app/nodejs)
:node_env a value will be passed as NODE_ENV environment variable (default: ENV["RAILS_ENV"]

Simple execution

you can just run node script use execute_node method after include RailsDotJS module. This is useful when you need to run the scripts as one time job or cron job. Adding jobs to cron tab is very easy with whenever gem in ruby environment.

class NodeExecution
  include RailsDotJs
  def run(file_name)
    execute_node(file_name)
  end
end

NodeExecution.new.run("someNodeFile.js")

Daemon

In most of case, you will use node.js script as a server. For this case you can run node script as daemon with template. To generate template, you can run following command

# rails g rails_dot_js:daemon DAEMON_NAME

It will create two scripts in script directory. DAEMON_NAME_ctrl and DAEMON_NAME

The content of the script DAEMON_NAME should be like this. you need to specify your script from daemonize_node part.

#!/usr/bin/env ruby


require 'rubygems'
require 'bundler/setup'
require 'railsdotjs'

class DaemonNameRunner
  include RailsDotJs
  def run
    set_config(:node_path, "#{File.dirname __FILE__}/../app/nodejs")
    ## it replace current process with the command executed so that it can be managed by daemons gem
    # daemonize_node("someNodeScriptHere.js")
  end
end

DaemonNameRunner.new.run

And you can start, stop and restart the daemon with following command

$ bundle exec script/DAEMON_NAME_ctrl start
$ bundle exec script/DAEMON_NAME_ctrl stop
$ bundle exec script/DAEMON_NAME_ctrl restart

For deployment, you can just add hook in config/deploy.rb like

namespace :deploy do
  after :restart, :node_restart do
    on roles(:web), in: :groups, limit: 3, wait: 10 do
      within release_path do
        execute :bundle, :exec, 'script/DAEMON_NAME_ctrl', 'restart'
      end
    end
  end
end

So that you can automatically restart node application and it will be managed by monitor process which means automatically get restarted when the process got killed unexpectedly.

pids files of the process should be in tmp/pids directory and log, STDIO, STDERR will redirect to log files in log/ directory.

RailsDotJs uses awsome Daemons gem to manage the process and we referred this article to make generator.

Contribution

Fork, fix and make a pull request

About

node.js environment for rails applications

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages