はじめに
本番環境のECS(Rails)×S3で詰まったエラーの共有ができればと思います。
実現したいこと
ECSにデプロイされたRailsアプリケーションからS3に画像をアップロードし、それを取得する機能を実装しようとしていました。
システム構成は以下のようなイメージです。
発生した事象とエラー
S3への画像アップロードは問題なくできましたが、画像の取得ができないという問題が発生しました。ECSのログを調査した結果、以下のエラーが確認できました。
ArgumentError (Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true):
どうやらRailsでURL生成に必要なホスト情報が設定されていない場合に発生するエラーのようでした。
エラーの発生原因
画像の取得処理として、以下のように画像のURLを生成しており、これが原因でエラーが発生していました。
url = url_for(image)
対処法
ホスト情報が設定されていないために発生するエラーですので、ホスト名を明示的に指定することが解決策です。具体的には、以下のようにECSで使用するURL(エンドポイント)の設定を行う必要があります。
config/production.rb
### RailsアプリのURLがhttps://example.comの場合
Rails.application.routes.default_url_options[:protocol] = 'https'
Rails.application.routes.default_url_options[:host] ='example.com'
参考情報