簡易的なフリマアプリを作成中。
AWSのS3に画像を保存するための実装を実施。
必要なファイルや記述なども終え、まずローカル環境で画像がS3に保存できるかの挙動確認を行う。
が、エラー発生。
エラー文は以下の通り。
NoMethodError (undefined method `upload' for nil:NilClass):
「スペルミスでもしたかな?」
まずは今回新たに追記したconfig/environments/development
とconfig/storage.yml
のファイルを見直す。
しかし特に間違っている様子はない。
次にエラー内容をgoogleにて検索。
すると、同じ境遇の方々がたくさんいらっしゃいました笑
それぞれの記事を見ていると「:が抜けている」や「""を忘れている」などの内容が多かったので、再度その辺りを確認するため、各コードを見直し。
が、やはり間違いが見当たらない・・・
S3に入る直前に挙動確認を行った際は、問題なく画像が保存されていたので、コードの書き間違いは考えにくい。
間違いがあるのはconfigの箇所であることはほぼ確定している。
でもどこが間違っているのかが全くわからない・・・
するととある記事を発見。そこには「余計なスペースが入っていた」と書かれている。
「スペース?そういえばそこは意識してなかったかも」
再度コードとにらめっこ開始。
すると・・・
発見!!!
local:
service: Disk
root: <%= Rails.root.join("storage") %>
amazon:
service: S3
region: ap-northeast-1
bucket: バケット名
access_key_id: <%= ENV['AWS_ACCESS_KEY_ID'] %>
secret_access_key: <%= ENV['AWS_SECRET_ACCESS_KEY'] %>
amazon:
の前に半角スペースが!
調べてみると、半角スペースがあるせいで、上記のlocal:
の続きと見なされてしまうのだとか。
早速この余計なスペースを削除して、再度挙動確認!
が、まだ保存できない・・・
さらに1時間考えた末、出した結論は
PC再起動
すると無事にエラー解決できました笑