おこった事
rails db:migrate
を(docker環境)をしようとしたら以下のエラーが起こった。
rbenv: rails: command not found
いや、そんなはずないでしょ。docker
でrailsは立ち上がっているんだし。(↓こんなのは出てた)
app-name | Puma starting in single mode...
app-name | * Version 3.12.1 (ruby 2.4.5-p335), codename: Llamas in Pajamas
app-name | * Min threads: 5, max threads: 5
app-name | * Environment: development
app-name | * Listening on tcp://0.0.0.0:3000
app-name | Use Ctrl-C to stop
原因
結論から言うと、直前にRailsをアップデートしていたのが原因で、gem のrails
へのパスが通らなくなっていた模様。
対処法
まず、rails を立ち上げているコンテナの中に入り、以下のコマンドでgemのインストール先を確認。
docker exec -it app-name bash
# コンテナ内で
gem environment
出力結果(の一部)がこちら
RubyGems Environment:
- RUBYGEMS VERSION: 3.0.3
- RUBY VERSION: 2.4.5 (2018-10-18 patchlevel 335) [x86_64-linux]
# 中略
- EXECUTABLE DIRECTORY: /usr/local/bundle/bin
- SPEC CACHE DIRECTORY: /home/docker/.gem/specs
# 中略
- SHELL PATH:
- /usr/local/bundle/gems/bin
- /usr/local/sbin
- /usr/local/bin
- /usr/sbin
- /usr/bin
- /sbin
- /bin
gemを実行する EXECUTABLE DIRECTORY
が SHELL PATH
の中に含まれていなかったのが原因でした。
ちゃんと絶対パスを使用すればrails
コマンドが使えることを確認して...
# コンテナ内で
/usr/local/bundle/bin/rails -v
Rails 5.0.7.2
パスを通したら解決できました。
# コンテナ内で
export PATH="/usr/local/bundle/bin:$PATH"
を実行したら直りました。
Railsをアップグレードするとこんなことが起こるんですね。。。。
(参考ですが、上記コード内のRailsのバージョン等は、色々なアプリから拾ってきているので適当です。実際にエラーが出たアプリではもっと新しいものを使用しています。)
手前味噌ですがパスを通すコマンドの書き方はこちら。
https://qiita.com/sazumy/items/eb3b26906faeba4ab463