前提・実現したいこと
lineのおうむ返しbotをrailsで書いて、herokuで作ろうと思ったところ、blank appとエラーが出てしまい、おうむ返しはされない。DBはmysqlを使っている。参考にした記事はこちら「Rails HerokuでLINE BOTを試してみた」
初心者なので初歩的な質問かと思いますが、解決に協力お願いします。
発生している問題・エラーメッセージ
エラーメッセージ 2018-06-21T02:52:14.668542+00:00 heroku[router]: at=info code=H81 desc="Blank app" method=POST path="/callback" host=〇〇〇.herokuapp.com request_id=772e0ddf-9f64-4d66-b93a-b34fbf16f1e8 fwd="203.104.146.154" dyno= connect= service= status=502 bytes= protocol=https
該当のソースコード
rails
1class WebhookController < ApplicationController 2 3 // Lineからのcallbackか認証 4 protect_from_forgery with: :null_session 5 6 CHANNEL_SECRET = ENV['line_secret'] 7 OUTBOUND_PROXY = ENV['herokuのfixie_proxy'] 8 CHANNEL_ACCESS_TOKEN = ENV['line_access_token'] 9 10 def callback 11 unless is_validate_signature 12 render :nothing => true, status: 470 13 end 14 15 event = params["events"][0] 16 event_type = event["type"] 17 replyToken = event["replyToken"] 18 19 case event_type 20 when "message" 21 input_text = event["message"]["text"] 22 output_text = input_text 23 end 24 25 client = LineClient.new(CHANNEL_ACCESS_TOKEN, OUTBOUND_PROXY) 26 res = client.reply(replyToken, output_text) 27 28 if res.status == 200 29 logger.info({success: res}) 30 else 31 logger.info({fail: res}) 32 end 33 34 render :nothing => true, status: :ok 35 end 36 37 private 38 # verify access from LINE 39 def is_validate_signature 40 signature = request.headers["X-LINE-Signature"] 41 http_request_body = request.raw_post 42 hash = OpenSSL::HMAC::digest(OpenSSL::Digest::SHA256.new, CHANNEL_SECRET, http_request_body) 43 signature_answer = Base64.strict_encode64(hash) 44 signature == signature_answer 45 end 46 47 48end
libファイル
1//libファイル 2 3require "faraday" 4require "faraday_middleware" 5require "json" 6require "pp" 7 8 9class LineClient 10 END_POINT = "https://api.line.me" 11 12 def initialize(channel_access_token, proxy = nil) 13 @channel_access_token = channel_access_token 14 @proxy = proxy 15 end 16 17 def post(path, data) 18 client = Faraday.new(:url => END_POINT) do |conn| 19 conn.request :json 20 conn.response :json, :content_type => /\bjson$/ 21 conn.adapter Faraday.default_adapter 22 conn.proxy @proxy 23 end 24 25 res = client.post do |request| 26 request.url path 27 request.headers = { 28 'Content-type' => 'application/json', 29 'Authorization' => "Bearer #{@channel_access_token}" 30 } 31 request.body = data 32 end 33 res 34 end 35 36 def reply(replyToken, text) 37 38 messages = [ 39 { 40 "type" => "text" , 41 "text" => text 42 } 43 ] 44 45 body = { 46 "replyToken" => replyToken , 47 "messages" => messages 48 } 49 post('/v2/bot/message/reply', body.to_json) 50 end 51 52end 53
試したこと
gemファイルを見直したり、herokuのDBをmysqlに設定し直したりはした。
herokuのconfigで環境変数も設定してある。
補足情報(FW/ツールのバージョンなど)
gemはmysqlのバージョンを合わせる他、
gem 'dotenv-rails'
gem 'faraday'
gem 'faraday_middleware'
group :production do
gem 'rails_12factor'
end
を追記した。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/21 05:44
2018/06/21 05:54
2018/06/21 14:52