前提
いつも拝見させていただいております。
ありがとうございます。
現在Ruby on Railsを用いてGoogle Books ApiにGETリクエストを送りresponseを加工してNuxt.jsにJsonデータを返却する機能を作っています。
Railsの中で以下のmodelに定義したメソッドを使用してGoogle Books ApiにGETリクエストを送る機能を作りました。
ローカル環境では正常に作動しているのですが、
aws(ecs、EC2)にデプロイしたところ表題の通りエラーが発生しました。
数日詰まっているため、皆様の知恵を貸していただきたくて質問しました。
実現したいこと
●何が起きているか知りたい。
●Net::HTTPでGoogle Books ApiにGETリクエストを送り、レスポンスを得たい。
発生している問題・エラーログ
●aws環境のログ


●ローカル環境のログ

該当のソースコード
models/google_book.rb
require 'google_books_api' class GoogleBook include ActiveModel::Model include ActiveModel::Attributes include ActiveModel::Validations attribute :google_books_api_id, :string attribute :authors attribute :image, :string attribute :published_at, :date attribute :title, :string attribute :publisher, :string validates :google_books_api_id, presence: true validates :title, presence: true class << self #lib以下に作成したモジュールを使用する include GoogleBooksApi def new_from_item(item) @item = item @volume_info = @item['volumeInfo'] new( google_books_api_id: @item['id'], authors: @volume_info['authors'], image: image_url, published_at: @volume_info['publishedDate'], title: @volume_info['title'], publisher: @volume_info['publisher'], ) end def new_from_id(google_books_api_id) url = url_of_creating_from_id(google_books_api_id) item = get_json_from_url(url) new_from_item(item) end #エラー発生個所↓ #以下のメソッドをコントローラーで使用します。 #フロントエンドからパラメーターとして送られてくる「keyword」を #引数に取っています。 def search(keyword) #フロントエンドからのリクエストをuriに変換 #url_of_searching_from_keywordメソッドは以下のmoduleで定義 url = url_of_searching_from_keyword(keyword) #ログに書き込み Rails.logger.debug(url) #urlをエンコード enc = Addressable::URI.encode(url) #ログに書き込み Rails.logger.debug(enc) #uriに変換 uri = URI.parse(enc) #ログに書き込み Rails.logger.debug(uri) #hostとポート番号をターミナルに出力 #puts uri.host => www.googleapis.com #puts uri.port => 443 require 'net/https' http = Net::HTTP.new(uri.host, uri.port) Rails.logger.debug(http) http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE request = Net::HTTP::Get.new(uri.request_uri) #getリクエストが為されているかをlogに書き込む Rails.logger.debug(request) #↓ここがおかしい(レスポンスが返ってこない) response = http.request(request) #↑ここまでの処理を機能させたい
lib/google_books_api.rb
module GoogleBooksApi def url_of_searching_from_keyword(keyword) "https://www.googleapis.com/books/v1/volumes?q=#{keyword}&country=JP" end
試したこと
①httpからhttps通信に
当初
response = Net::HTTP.get(uri)
というコードを使用していましたが、これを上記modelの通りssl化しました。
②Rails.logger.debugによるデバッグで問題発生箇所を特定
コードを分解し、Rails.logger.debugでどこまで処理が実行されているか確認
したところ
Production.logのlogで
Net::HTTP::Get:0x00007f7e4af86658
というログを発見したため、RailsからGoogle Books Apiへのgetリクエスト自体は送られていると思われます。
補足情報(FW/ツールのバージョンなど)
現在もエラーの原因を調査中ですが、他の方の知恵や対処法(デバック方法)を知りたくて質問させていただきました(以前ご指摘いただいてビックリしたのですが丸投げする意図は全っっっっくありません)。
どうか、皆様の力を貸してください。
足りない情報やご意見がありましたら、コメントを頂けると助かります!
Ruby 3.0.2
Rails 6.1.6

0 コメント