LoginSignup
4
0

はじめてのRubyバージョンアップ対応とCould not find net-pop-0.1.2, net-smtp-0.3.3, rake-13.0.6 in locally installed gems

Last updated at Posted at 2023-12-10

はじめに

今年のカレンダーはとある会社のとあるチームで活動した1年間を振り返っていきます

登場人物

アーキテクチャ先生:

AWSが好きな新上司。Docker on Lambdaを利用したサーバーレスアプリケーションのアーキテクチャなどが得意。いつも忙しい。

ちいかわトミカさん:

先輩で頼りになる方。疲れたらちいかわトミカで遊んでいる?よくダジャレを言う。得意なダジャレは「今日言う共有事項はないです」

はじめてのバージョンアップ対応

私「そろそろRails6のサポートとlambdaランタイムRuby2.7のサポート期限が近いので対応しないといけないですね」

ちいかわトミカさん「調べたことなどはまとめておいてもらえると助かります」

アーキテクチャ先生「社内でも対応できているところは少ないと思うのでお願いします」

はじめてのバージョンアップ対応

Railsの対応で遭遇したエラーは以下の2種類

Failure/Error: require_relative '../config/environment'

NoMethodError:
  undefined method `symbolize_keys' for nil:NilClass
Failure/Error: require_relative '../config/environment'

FrozenError:
  can't modify frozen Array: []

ymlでaws credentialを参照する書き方をしていましたが、ymlを使わず.rbファイルをinitialize直下に置く形で解決しました。
この辺りは何とかなったのですが、dockerイメージをlambdaに載せてデプロイしアクセスしてみるとエラー…

image.png

でもローカルのGemfileにはいます…

image.png

色々調べたり社内掲示板で助けを求めたところ、
「デプロイ先のコンテナでbundle installされていないかも…?」という仮説にたどり着きました。

バージョンアップ前はデプロイして問題なくアクセスできていたのでまさかと思っていましたが、
デプロイ前にコンテナ内でbundle configするとvendor/bundleの指定がされていませんでした。

image.png

lambda関数がAWS SDK for Ruby以外のライブラリに依存している場合はローカルにインストールしてデプロイパッケージに含める必要があります。

今回はlambda関数がvendor/bundleを参照できていなかったため、Gemfileの更新内容も反映されずにエラーが起きていたようです。

RUN bundle install

RUN bundle config set --local path 'vendor/bundle' && bundle install

に変更することで無事解決できました。

おわりに

今回の対応でdokcerのRubyイメージのバージョンも上げたためかデフォルトの参照先が変わってしまったのかもしれないです。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0