ご挨拶
初めまして!
未経験からエンジニアを目指しプログラミングスクールで学習し、就活中のあいと申します。
/usr/local/bundle/bin/rails
を削除して大変でしたが、dockerについてちょっと学んだことをまとめております。
どなたかのお役に立てますと幸いです。
前提
初学者がアプリ開発を通して学んだことをまとめておりますので、温かい目で見守ってくださると幸いです。
もし別の方法でうまくいっている方がいらっしゃれば、教えていただけますと幸いです。
状況
Rails Tutorialで、環境構築はdocker、本番環境はflyioで実装。
発生したエラー
- Rails8がインストールされてしまい、Rails7にインストールし直したが、ターミナルで
rails -v
で確認するとバージョンがRails8のままだった。 - それを解決するために、誤って消しちゃいけない
/usr/local/bundle/bin/rails
を削除し、railsコマンド
が使えなくなった。-
rails new
とかができなくなった。
-
使用資料
- lnコマンドめっちゃ便利。
- スクール生自作資料
-
- エラー解決後、スクールの講師に
/usr/local/bundle/bin/rails
に対する自分自身の理解と認識を確認した。
- エラー解決後、スクールの講師に
解決策
- 上記エラーを、
ln -s コマンド
で解決。
詳細
-
lnコマンド
は、リンクを貼るコマンド。 -
ln -s コマンド
は、シンボリックリンクを貼るコマンド。
考察
- 今回の場合は、
Railsのコマンド本体(Rubyで書かれた実行スクリプト)
を/usr/local/bundle/bin/rails
この名前で呼ばれるようにするために、ln -s コマンド
を使って、「railsコマンドの入り口」を作り直したので、解決した。- 「railsコマンドの入り口」を作る必要があるので、ディレクトリをただ作り直すだけではダメ。
-
/usr/local/bundle/bin/rails
の削除は、他のコンテナやアプリにも影響が出る。- Dockerfile内の下記の記載によって、ファイルが実行されたときに、
/usr/local/bundle /usr/local/bundle
が参照される。Dockerfileに下記の記載があれば、他のアプリディレクトリやコンテナでも共通で参照される。 - railsをインストールすると、
/usr/local/bundle /usr/local/bundle
ファイル下にbin/rails
ができる。そこに、railsのファイルデータは保存される。 - そのため、
/usr/local/bundle/bin/rails
を削除すると、他のコンテナ(下記の記載がdockerfileにあるコンテナ)は影響を受ける。
# Dockerfile内の下記の記載 # Copy built artifacts: gems, application COPY --from=build /usr/local/bundle /usr/local/bundle COPY --from=build /rails /rails
- Dockerfile内の下記の記載によって、ファイルが実行されたときに、