@kyanny's blog

My thoughts, my life. Views/opinions are my own.

line-bot-sdk-ruby のサンプル echobot を Heroku で動かす方法

2016/10/06 14:59 追記 コメント欄参照。IPアドレスをホワイトリストに登録する必要は無いのでHTTPプロキシを通す必要もなく、従ってサンプルコードは無改変で動く模様。以下の内容は全て徒労だった。


Gemfile.lock とか config.ru を足して、固定グローバル IP で LINE Messaging API にアクセスするように HTTP プロキシを通せばよい。それらが設定済みの Deploy できるリポジトリはこちら↓

github.com

...が、 HTTP プロキシを通すようにするだけのことで異常にハマった。結論として、必要最小限のメソッドをオーバーライドするのが良い。オリジナルの app.rb との Diff はこんな感じ。

Comparing c2f3dd962772b2c8a2cda05528ff643d750b5597...v1.0.0 · kyanny/line-echobot-heroku · GitHub

+module Line
+  module Bot
+    class HTTPClient
+      def http(uri)
+        proxy = URI(ENV["FIXIE_URL"])
+        http = Net::HTTP.new(uri.host, uri.port, proxy.host, proxy.port, proxy.user, proxy.password)
+        if uri.scheme == "https"
+          http.use_ssl = true
+        end
+
+        http
+      end
+    end
+  end
+end

line-bot-sdk-ruby 自体に HTTP クライアントオブジェクトを差し替える機能があり、それを利用して Heroku で Fixie を使って HTTP プロキシを通すようなコード例もあった。

だが、これらのコードを使って Heroku にデプロイしたところ、いずれもうまく動作しなかった。

  • https://github.com/line/line-bot-sdk-ruby/pull/20 のコードだと、何故か HTTP プロキシの設定が消えてしまった http オブジェクトでリクエストが発行されてしまい、許可されていないグローバル IP アドレス経由でのリクエストとなり NG
  • RestClient と HTTPClient を利用した HTTP クライアントオブジェクトを利用するコードでは、 HTTP ヘッダをうまく引き回せず LINE Messaging API のアクセス認証エラーが発生してしまい NG

教訓

  • 他人の書いたコードを鵜呑みにしないこと。そのまま動くと思わないこと。テストが書かれていても「テストごと間違っているかもしれない」と疑ってかかること。
  • ログを出力していないコードをそのまま動かさないこと。ログを必要なだけ仕込むこと。

ChromeDriver を使ったあと新規ウィンドウを普段使いの Chrome で開けなくなったときの対処法

ChromeDriver を使ったあと、新規ウィンドウを開こうとすると普段使いの Chrome ではなく、常にまっさらな Chrome のタブで開いてしまい、普段どおりの使い方ができなくなることがある(あった)。

これは ChromeDriver 経由で起動されたまっさらな Chrome のプロセスが生き残っているせいなので、 Mac ならアクティビティモニタを開いて Chrome プロセスを終了させると直る。

Spotted Flower(2)

Kindle版がまだ出てなかったので、近所の本屋で1巻と合わせて買った。駅の小さい本屋だけど、発売日に先駆けて1巻もこぢんまりと平積みされていた。でもKindle版も出たら買うと思う。

「二代目」の絵に目が慣れたせいか、1巻に比べて「あーこれは確かに咲っぽい、というか咲に見える」と感じた。コスとか、ハトヤジとかも含めて、木尾やりたい放題だないいぞもっとやれ、と思った。あと扉絵の奥さんのウェディングドレス姿がよかった。

Spotted Flower 2 (楽園コミックス)

Spotted Flower 2 (楽園コミックス)

しかし、これ続くとして、スーにオギの影を匂わせてるってことは3巻は満を持してオギヤブ登場、って流れだと思うけど、ササどこいった??という問題が(まさかのササコー??いやいくらなんでも人間関係ただれすぎでは...でも、サキマダルートはそんだけ無理がある異次元なんだよ皆が不幸になるんだよ、という木尾のメッセージだったらどうしよう、とつい深読み)

#linedevday 来場者ノベルティのビーコンを LINE@ アカウントに連携するとき必要な端末 ID とパスコードはデバイスの単三電池を外すとシールが貼ってある

f:id:a666666:20160930034231p:plain

f:id:a666666:20160930030617j:plain

  • 端末ID == HWID
  • パスコード == CODE

でいけた。

あと、ビーコンを LINE@ アカウントと連携する方法の説明ページへのリンクが、ノベルティが入ってる箱のビーコンを外した底にシールが貼ってある。