Slackでボットを作りたい(作り直し)

Slackでボットを5秒以内に作れるツールを作ったAWSのEC2無料枠で利用するためのメモ、前回はRailsのインストールを後半に行ったために無駄な苦労が多かったように感じたので一からやり直し。

AWSアカウントとかはすっ飛ばす。東京リージョンにする。

EC2で作成

  • コンソール>EC2>インスタンスの作成
  • ステップ 1: Amazon マシンイメージ(AMI)/Amazon Linux AMI(一番上、無料利用時枠の対象)
  • ステップ 2: インスタンスタイプの選択/t2.micro(一番上、無料利用時枠の対象)
  • ステップ 3: インスタンスの詳細の設定/変更なし
  • ステップ 4: ストレージの追加/変更なし
  • ステップ 5: インスタンスのタグ付け/Bot Heaven
  • ステップ 6: セキュリティグループの設定/新しい・SSH・カスタムIP(x.x.0.0/16)
  • ステップ 7: インスタンス作成の確認/
  • キーペア/未生成だったら作る&DLする
  • インスタンスが出来上がるまでコーヒーを飲む

Tera Termで接続

  • 新しい接続/ホスト:EC2のパブリックIP、SSH
  • ユーザ名:ec2-user/パスフレーズ:暗号鍵のアレ/秘密鍵:キーペアでDLしたやつ(pemは「すべての・・」)

確認

$ sudo yum update
(いっぱいアップデート)
$ ruby -v
(バージョンがでる)
$ rails -v

  • bash: rails: command not found(インストールされていない)

Railsのインストール

$ sudo gem install rails
Fetching: i18n-0.7.0.gem (100%)
Successfully installed i18n-0.7.0
Fetching: thread_safe-0.3.5.gem (100%)
Successfully installed thread_safe-0.3.5
Fetching: tzinfo-1.2.2.gem (100%)
Successfully installed tzinfo-1.2.2
Fetching: minitest-5.7.0.gem (100%)
Successfully installed minitest-5.7.0
Fetching: activesupport-4.2.3.gem (100%)
Successfully installed activesupport-4.2.3
Fetching: rack-1.6.4.gem (100%)
Successfully installed rack-1.6.4
Fetching: rack-test-0.6.3.gem (100%)
Successfully installed rack-test-0.6.3
Fetching: mini_portile-0.6.2.gem (100%)
Successfully installed mini_portile-0.6.2
Fetching: nokogiri-1.6.6.2.gem (100%)
Building native extensions. This could take a while...
ERROR: Error installing rails:
ERROR: Failed to build gem native extension.

/usr/bin/ruby2.0 extconf.rb
mkmf.rb can't find header files for ruby at /usr/share/ruby/include/ruby.h


Gem files will remain installed in /usr/local/share/ruby/gems/2.0/gems/nokogiri-1.6.6.2 for inspection.
Results logged to /usr/local/share/ruby/gems/2.0/gems/nokogiri-1.6.6.2/ext/nokogiri/gem_make.out

nokogiriでコケたらしい。nokogiriをビルドできずにrailsのインストールが失敗する。AWSのec2インスタンス上にcapistranoとaws-sdk(ruby)をインストールしようとしたらnokogiriに阻まれた話など、ググるとよくあることらしい。

$ yum install libxml2 libxslt libxslt-devel
$ yum install gcc libxml2-devel libxslt-devel ruby-devel
$ gem install nokogiri -- --use-system-libraries

鋸がはいったのでrailsを入れる。エラーになったので要点だけ

$ sudo gem install rails

If you are using Bundler, tell it to use the option:

bundle config build.nokogiri --use-system-libraries
bundle install
$ bundle -v

  • bash: bundle: command not found

$ gem install bundler
$ bundle -v
/usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- io/console (LoadError)

またか。なれっこだ。

$ sudo yum install -y ruby-devel
$ sudo yum install -y ruby20-devel gcc-c++
$ gem install io-console
$ bundle -v
Bundler version 1.10.5

そして最大のなぞ

$ sudo gem install rails
(エラー)
$ gem install rails
(インストールできた)

とりあえずできた。ここまでが前準備になる。

本体をデプロイする

gitから入手する。

$ sudo yum install git
$ git clone https://github.com/alfa-jpn/BotHeaven.git

入った。

環境変数を設定する

「.env.example」ってのがある。「.gitignore」を見ると「.env」を見るような感じ。

$ cp .env.example .env
$ vi .env

SlackのアプリケーションIDとキーをhttps://api.slack.com/applicationsから取得

  • Name:てきとー
  • URL:null
  • RedirectURI(s):http://(EC2のパブリックIP):3000/auth/slack/callback
  • Description:てきとー
  • Team:稼働させるところ

トークンを取得するhttps://api.slack.com/web#authentication

  • Teamの「Create token」で発行する

APIのテストhttps://api.slack.com/methods/auth.test/testで「Test Method」でズラズラでてきたらOK

ボットインテグレーションを作成するhttps://slack.com/services/new/bot
Menu > Manage Your Teamに作成される

SLACK_TEAM_ID=SlackのチームID(auth.testのteam_id
SLACK_APP_ID=SlackのアプリケーションID(Application DetailsのClient ID
SLACK_APP_SECRET=Slackのアプリケーションキー(Application DetailsのClient Secret
SLACK_BOT_NAME=Slackのボット名(BotsのCustomize Name
SLACK_BOT_TOKEN=Slackのボットトークン(BotsのAPI Token
SECRET_KEY_BASE=(http://www.convertstring.com/ja/Hash/SHA256で作成する

正しいのかよくわからん。

Gemをインストールする

エラーとの戦いになりそう。

$ bundle install --path vendor/bundle

An error occurred while installing pg (0.18.1), and Bundler cannot continue.
Make sure that `gem install pg -v '0.18.1'` succeeds before bundling.
$ sudo yum -y install postgresql-devel
$ gem install pg -v '0.18.1'

postgresql-develとpgはいったよ

$ bundle install --path vendor/bundle

An error occurred while installing puma (2.11.2), and Bundler cannot continue.
Make sure that `gem install puma -v '2.11.2'` succeeds before bundling.
$ sudo yum install openssl-devel
$ gem install puma -v '2.11.2'

openssl-develとpumaはいったよ

$ bundle install --path vendor/bundle

An error occurred while installing sqlite3 (1.3.10), and Bundler cannot
continue.
Make sure that `gem install sqlite3 -v '1.3.10'` succeeds before bundling.
$ sudo yum install sqlite-devel
$ gem install sqlite3 -v '1.3.10'

sqlite-develとsqlite3はいったよ

$ bundle install --path vendor/bundle

やっと終わったよ!

DBを初期化する

$ bundle exec rake db:migrate RAILS_ENV=production
== 20150423083436 CreateBots: migrating =======================================

    • create_table(:bots)

-> 0.0018s
== 20150423083436 CreateBots: migrated (0.0020s) ==============================

== 20150512033458 CreateUsers: migrating ======================================

    • create_table(:users)

-> 0.0012s
== 20150512033458 CreateUsers: migrated (0.0014s) =============================
terminate called after throwing an instance of 'std::runtime_error'
what(): Encryption not available on this event-machine
Aborted

何でコケた?db/migrateを眺めると7つのマイグレーションファイルがある。

20150423083436_create_bots.rb 20150525143529_create_bot_modules.rb
20150512033458_create_users.rb 20150525154743_create_bot_bot_modules.rb
20150513111453_create_alarms.rb 20150529165120_change_minutes_to_alarms.rb
20150519103113_create_storages.rb

依存関係かな?

$ bundle exec rake db:migrate RAILS_ENV=production
('std::runtime_error'が出なくなるまで複数回繰り返す)

終わった。

実行する

$ bundle exec rails s -e production
=> Booting Puma
=> Rails 4.2.0 application starting in production on http://localhost:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
Puma 2.11.2 starting...

  • 1436494052* Min threads: 0, max threads: 16
  • 1436494053* Environment: production
  • 1436494054* Listening on tcp://localhost:3000

terminate called after throwing an instance of 'std::runtime_error'
what(): Encryption not available on this event-machine
Aborte

動かない!!!

迷走モード

$ gem install em-http-request (変化なし
$ bundle exec rails s -e production (Adortedになる
$ bundle exec rails s -e test (Adortedにならない!!
$ sudo yum install libcurl-devel openssl-devel (変化なし

だめだ、、、わからん

インストール方法
 VPS等はもちろん、Herokuにもデプロイして使えるような設計になっています。

Herokuに乗り換えるか・・・