3
1

More than 1 year has passed since last update.

突然rails: command not foundと言われてびっくりした時の話。

Posted at

おこった事

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 DIRECTORYSHELL 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

3
1
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
3
1