Mustache :{

moon indicating dark mode
sun indicating light mode

p5-hubot onto heroku

...

June 10, 2013

오리지날 hubot 에는 heroku 어쩌고 저쩌고 하는 기능이 있습니다.

이제 p5-hubot 에서도 됩니다.

OVERVIEW

$ cpanm Hubot # requires Hubot >= 0.2.0
$ hubot --create /path/to/hubot # 배치가능한 형태의 패키지 저장소를 생성합니다
$ cd /path/to/hubot
$ git init ; git add . ; git commit -m "init commit"
$ heroku create --stack cedar --buildpack https://github.com/aanoaa/heroku-buildpack-perl.git
$ heroku config:add HEROKU_URL=http://your-herokuapp.herokuapp.com
$ heroku config:add HUBOT_IRC_ROOMS='#channel'
$ heroku config:add HUBOT_IRC_SERVER='irc.freenode.net'
$ git push heroku master

가장 기본은 이렇습니다만, 확장 스크립트를 추가하시려면 hubot-scripts.json 파일에 적어주시고 그에 따른 모듈 의존성은 cpanfile 에 적어서 해결해야 합니다.

CREATE A DEPLOYABLE HUBOT

CPAN 을 이용한다면,

$ cpanm Hubot
$ hubot -c ~/Desktop/hubot

명령어로 deploy 저장소를 만들 수 있습니다.

$ cd ~/Desktop/hubot/
~/Desktop/hubot $ find
.
./.gitignore
./cpanfile
./hubot-scripts.json
./bin
./bin/hubot
./README.md
./lib
./lib/Hubot
./lib/Hubot/EventEmitter.pm
./lib/Hubot/Scripts
./lib/Hubot/Scripts/help.pm
./lib/Hubot/Scripts/ascii.pm
./lib/Hubot/Scripts/shorten.pm
./lib/Hubot/Scripts/tweet.pm
./lib/Hubot/Scripts/roles.pm
./lib/Hubot/Response.pm
./lib/Hubot/Robot.pm
./lib/Hubot/User.pm
./lib/Hubot/Adapter.pm
./lib/Hubot/TextListener.pm
./lib/Hubot/Listener.pm
./lib/Hubot/Adapter
./lib/Hubot/Adapter/Irc.pm
./lib/Hubot/Adapter/Shell.pm
./lib/Hubot/Adapter/Campfire.pm
./lib/Hubot/Message.pm
./lib/Hubot/Brain.pm
./lib/Hubot/Creator.pm
./lib/Hubot.pm
./Procfile

이 디렉토리를 git 저장소로 만들고요, heroku tool 을 사용해서 heroku 에서 돌아갈 서비스 저장소로 만듭니다.

Procfile 은 heroku 에서 사용하는 process 타입별로 실행 명령어를 담고 있는 어쩌고 저쩌고;; Process Types and the Procfile

cpanfile 은 모듈의존성을 해결하기 위해 꼭 필요합니다. 그렇지 않으면 아래와 비슷한 오류가 발생되면서 프로그램이 실행되지 않습니다.

Can't locate xxx.pm in @INC (@INC contains: ~~~) at line 1.

나머지는 p5-hubot core 모듈입니다.(서비스엔 필요없는것도 잇지만..)

CREATE A HEROKU INSTANCE?

$ heroku create --stack cedar --buildpack https://github.com/aanoaa/heroku-buildpack-perl.git

heroku 라는 remote 를 등록하고 BUILDPACK_URL 설정변수를 추가하는 것 정도가 아닐까 추측 합니다.

BUILDPACK_URL 은 git 저장소인데,

  • bin/detect
  • bin/compile
  • bin/release

를 가지고 있습니다. 자세한 내용은 Creating a Buildpack 을 참고하시고, 이부분의 매직은 bin/compile 이 수행될때 cpanm 을 이용해서 ./local 에 의존모듈을 설치합니다. 그리고 실행할때에 -Ilocal/perl5/lib PERL5LIB 에 추가합니다. 풀어쓰면 아래와 같습니다.

$ cpanm --quiet --notest -l $BUILD_DIR/local --installdeps .

@miyagawa++ 입니다.

그리고 heroku 에 push 하면 알아서 돌아갑니다(별일 없으면..)

SEE ALSO