Ivan Davidov
Ivan Davidov

Reputation: 823

hubot-slack "Cannot find module" - from upstart only

I'm following a tutorial on PluralSight regarding vagrant and hubot slack setup.

The only difference is that I'm using hubot-slack.

If I start the hubot by invoking hubot script from terminal - everything works fine - the bot connects and responds to commands.

Unfortunately, when the hubot is started as a service from by the upstart - I get this logged into /var/log/upstart/myhubot.log `Cannot load adapter slack - Error: Cannot find module 'hubot-slack'

my /bin/hubot file looks like this (this works just fine when executed from cli):

#!/bin/sh
set -e
npm install
export PATH="node_modules:node_modules/.bin:node_modules/hubot/node_modules/.bin:$PATH"
export HUBOT_SLACK_TOKEN={}
exec node_modules/.bin/hubot --name "hubot" --adapter slack "$@"

my .conf file that's executed as a service looks like this (can't find module):

description "My hubot"
author "Me [email protected]"

start on runlevel [2345]
stop on runlevel [016]

setuid vagrant

env HOME="/home/vagrant"

chdir /vagrant/my-awesome-hubot

console log

script
  export PATH="node_modules:node_modules/.bin:node_modules/hubot/node_modules/.bin:/usr/bin/coffee:/usr/bin/node:$PATH"
  export HUBOT_SLACK_TOKEN={}
  echo "DEBUG: `set`" >> /tmp/myhubot.log
  exec node_modules/.bin/hubot --name "hubot" --adapter slack
end script

respawn

Keep in mind that the slack token is excluded from these scripts. Debug reveals that chdir does the correct thing and the pwd is exactly the same as when I execute the script manually.

I've tried removing entire nodejs project and generating with yeoman from scratch and also tried installing hubot-slack both globaly and localy but to no avail.

In case of a .conf file - there is no npm install but in the provision.sh file - I am cd-ing (as a vagrant user) to the root directory, doing npm install - and only then, service restart. I am also making sure to clean up everything before another round of testing before I do - vagrant provision

cp /vagrant/upstart/myhubot.conf /etc/init/myhubot.conf
sudo -u vagrant -i sh -c 'cd /vagrant/my-awesome-hubot; npm install'
service myhubot restart

Do you have any suggestions.

Upvotes: 0

Views: 873

Answers (1)

wildgooze
wildgooze

Reputation: 11

I've just spent the day working through the same issue as this unanswered question so thought I would update with my solution.

The current hubot generated app is started with the cli with command HUBOT_SLACK_TOKEN=xoxb-YOUR-TOKEN-HERE ./bin/hubot --adapter slack whilst in the folder where hubot was generated. Therefore the utilises the default bin/hubot script.

Your conf file needs to pick this up therefore should run the following:

description "My hubot"
author "Me [email protected]"

start on runlevel [2345]
stop on runlevel [016]

script
  chdir /vagrant/my-awesome-hubot
  export PATH="node_modules:node_modules/.bin:node_modules/hubot/node_modules/.bin:/usr/bin/coffee:/usr/bin/node:$PATH"
  HUBOT_SLACK_TOKEN=xoxb-YOUR-TOKEN-HERE ./bin/hubot --adapter slack --name "hubot" >> /tmp/myhubot.log
end script

respawn

Upvotes: 1

Related Questions