LoginSignup
2
1

More than 3 years have passed since last update.

slackinとHerokuでSlackの自動招待システムを用意したときにつまづいたことのメモ

Last updated at Posted at 2019-04-30

スクリーンショット 2019-04-30 13.01.35.png

Unity Fukuokaというコミュニティをやってまして、前に専用Slackを作っていました。
その専用Slackに自動招待ができるようにslackinとHerokuを使って無料作れる事を知り用意していたところ、1年以上ぶりに開くとApplication errorとなっていたことを先日知りました(コミュニティー自体全然動いていないので案の定何の連絡もありませんでした苦笑)。

久々に触りたいこともあって作り直した際に何点かつまづいたことのメモとして、正直使いにくいHerokuの使い方や所感も交えながら書いているのでお急ぎの方は欲しい情報だけ読んでくださいmm

heroku-cli

Herokuのsignupが終わったのちに、slackingを使うのでデプロイはやりませんが、heroku-cliをインストールしておきましょう。

heroku-cliは、Node.jsで作られているCLIツールなので(問題が起きないことを確認した上で)npm updateをやってからインストールすると良いでしょう。

Herokuは、Node.jsで操作させるアーキテクチャになっているみたいでちょっと面白いですよねぇ^^

slackin

rauchg/slackinREADMEに載っているHerokuをクリックするとslackinとHerokuが連携している状態でHerokuアプリケーションが作成できます。

スクリーンショット 2019-04-30 13.30.58.png
スクリーンショット 2019-04-30 13.38.27.png

遷移先のslackin × Herokuのアプリケーション作成に必要な情報は以下の内容です。

  • GOOGLE_CAPTCHA_SECRET
  • GOOGLE_CAPTCHA_SITEKEY
  • GOOGLE_CAPTCHA_SITEKEY
    • 自動招待したいSlackのレガシートークン
  • SLACK_SUBDOMAIN
    • 自動招待したいSlackのサブドメイン

Google reCAPTCHA

Google reCAPTCHAは、ボットからサイトを守るセキュリティシステムです。

スクリーンショット 2019-04-30 13.40.21.png
スクリーンショット 2019-04-30 13.41.03.png

間違いやすいですがHerokuのページでは、上からシークレットキーサイトキーですが、recaptchaのページだと、上からサイトキーシークレットキーと順番が逆なので何も考えずそのままコピペして間違わないように注意しましょう。

Slack Legacy Tokens

Legacy tokensで自動招待したいSlackのトークンを発行しましょう。

スクリーンショット 2019-04-30 14.21.00.png

Deploy app

全て入力後にDeploy appを押すとちょっと待ち時間がありますが、数分後すぐにアプリケーションがデプロイされてhttps://【App name】.herokuapp.com/にアクセスできるようになります。

私の場合は、ある問題でアクセスしてもApplication errorページでそこから1時間以上つまづいた状況でした。

Application error

まず、Application errorページが出たときは、ログの確認です。
ですが、Herokuの管理画面上ではログを確認することができません。

マジでHerokuの使い方って分かりにくいんですが苦笑、heroku-cliからログを確認することができます。
確認するには、まず、デプロイはしませんがHerokuアプリケーションをlocalにcloneする必要があります。

スクリーンショット 2019-04-30 14.29.58.png

以下のコマンドのそれ以降のコマンドは行わなくて大丈夫です。

$ heroku git:clone -a 【App name】
$ cd 【App name】

この次に

$ heroku logs --tail

と実行すると作ったHerokuアプリケーションが動いているログがリアルタイムで流れ込んできます。
再度https://【App name】.herokuapp.com/にアクセスしてみるとエラーの詳細が表示されてますのでそこから原因を探ることになります。

さて、私の場合は以下の各エラーが表示されて原因が突きとめました。

status=503

heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=unityfukuoka.herokuapp.com request_id=【REQUEST_ID】 fwd=【IP】 dyno= connect= service= status=503 bytes= protocol=https
heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=unityfukuoka.herokuapp.com request_id=【REQUEST_ID】 fwd=【IP】 dyno= connect= service= status=503 bytes= protocol=https

これはエラーが原因で出てしまうエラーのようです。
簡単に説明すると「デプロイ」→「反映」→「アクセス可能」というフローでデプロイ時に何らかの問題が起き、反映が完了できておらず、アクセス不可状況でアクセスしてしまうとこのエラーが出てしまうようです。

TypeError: Cannot read property 'body' of undefined

app[web.1]: TypeError: Cannot read property 'body' of undefined
app[web.1]: at /app/dist/slack.js:62:23
app[web.1]: at Request.callback (/app/node_modules/superagent/lib/node/index.js:699:3)
app[web.1]: at ClientRequest.<anonymous> (/app/node_modules/superagent/lib/node/index.js:636:10)
app[web.1]: at ClientRequest.g (events.js:292:16)
app[web.1]: at emitOne (events.js:96:13)
app[web.1]: at ClientRequest.emit (events.js:188:7)
app[web.1]: at TLSSocket.socketErrorListener (_http_client.js:309:9)
app[web.1]: at emitOne (events.js:96:13)
app[web.1]: at TLSSocket.emit (events.js:188:7)
app[web.1]: at emitErrorNT (net.js:1277:8)
heroku[web.1]: Process exited with status 1

これはデプロイ時に起きたエラーでした。
正直このエラーでは全く分かりませんでした笑汗

色々調べたところslackinのissuesにIssues with set up in heroku #160があるのを見つけて、サブドメインに関する話しをされていたのでSLACK_SUBDOMAINに設定した内容を確認しました。

オプションの設定後の確認/編集について

これまたHerokuの分かりづらいUI/UXで初見じゃどこに設定したオプションが確認と編集ができるのか気づきにくいんですよねぇ( *`ω´)
SettingページのConfig VarsReveal Config Varsボタンをクリックすると設定した各オプションが表示され、確認と編集が可能になります。

スクリーンショット 2019-04-30 14.45.56.png
 ↓ クリック後
スクリーンショット 2019-04-30 14.46.44.png

このとき、私がSLACK_SUBDOMAINに設定した内容は、unityfukuoka.slack.comでした。
サブドメインだからそのまま指定しましたが、試しにhttps://unityfukuoka.slack.comなどと設定してみたところ、Error: getaddrinfo ENOTFOUND https https:443という結果でした。

ちなみにどれかConfig Varsのオプションを変更するとHerokuが勝手に毎度デプロイ作業を自動で行います。
$ heroku logs --tailしておくとその様子が見れるのですぐに確認ができます。

Error: getaddrinfo ENOTFOUND https https:443

app[web.1]: Error: getaddrinfo ENOTFOUND https https:443
app[web.1]: at errnoException (dns.js:28:10)
app[web.1]: at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:76:26)

なおさら分からなくなりましたね笑汗
再度、SLACK_SUBDOMAINunityfukuoka.slack.comに戻したところ次のエラーが表示されました。

Error: Hostname/IP doesn't match certificate's altnames

app[web.1]: Error: Hostname/IP doesn't match certificate's altnames: "Host: unityfukuoka.slack.com.slack.com. is not in the cert's altnames: DNS:slack.com, DNS:*.slack.com"
app[web.1]: at Object.checkServerIdentity (tls.js:199:17)
app[web.1]: at TLSSocket.<anonymous> (_tls_wrap.js:1098:29)
app[web.1]: at emitNone (events.js:86:13)
app[web.1]: at TLSSocket.emit (events.js:185:7)
app[web.1]: at TLSSocket._finishInit (_tls_wrap.js:610:8)
app[web.1]: at TLSWrap.ssl.onhandshakedone (_tls_wrap.js:440:38)
heroku[web.1]: Process exited with status 1

ここでやっとエラーの原因が分かりました。
DNS:*.slack.comとあり、Host: unityfukuoka.slack.com.slack.comと表示されているため、SLACK_SUBDOMAINへの設定は、unityfukuoka(Slackのアプリ名)だけで良かったようです^^;

まとめ

その後は、全てデプロイが上手く処理され反映が完了し、この記事のトップに載せている画像のページが表示されるようになりました。

参考にした記事は以下になりますので、付き合わせて何かのお役に立てたらなと思いますmm

 

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1