はじめに
プログラミング初学者の@kat_logと申します。
railsチュートリアル(第6版)のコードサンプルをGitHubからフォークして、ローカルに構築しようとした時に色々なエラーと格闘して、解決したためその流れを記録&共有です。
(README.mdを元に「第6版の11章を動かす」までの流れです。)
流れ
- 本リポジトリをクローンし、該当のディレクトリへ移動します。
→問題なく実行できました - 必要なパッケージをインストールし、bundle install(本番環境でのみ必要なgemはスキップ)します。
→問題なく実行できました - データベースを移行します。
→ここで躓きました😅
エラーとの戦い
ここから長い戦いとなりました💦
rake-12.3.3がありません😭
「3.データベースを移行します。」のrails db:migrate
を実行すると、
Could not find rake-12.3.3 in any of the sources
Run `bundle install` to install missing gems.
というrake-12.3.3
が見つからないというエラーが出ました。
なので、メッセージ内にある通りbundle install
を実行しました。
非互換のrubyバージョンです😭
すると次は
ruby_dep-1.5.0 requires ruby version >= 2.2.5, ~> 2.2, which is incompatible with the current version,
ruby 3.0.1p64
というrubyのバージョンに関するエラーが出ました。
bundlergemのバージョンを合わせても変わらず
railsチュートリアルに
とあるため、「bundlergemのバージョンが違うからかも」と思いrailsチュートリアル同様2.2.17に変えて(それまで2.2.15でした)bundle install
を再度行うも、同じく
ruby_dep-1.5.0 requires ruby version >= 2.2.5, ~> 2.2, which is incompatible with the current version,
ruby 3.0.1p64
となりました。
(↓参考:特定のバージョンにてbundle install
する方法があるようです)
ruby2系を入れてみる
rbenv versions
でローカルにインストールしているrubyを確認すると、3.0.1しか入っていなかったので、
rbenv install 2.7.3
にて2系をインストールし、
rbenv global 2.7.3
にて2.7.3を使うようにしました。
railsコマンドが見つかりません😭
再びbundle install
実行すると、次は
rbenv: rails: command not found
The `rails' command exists in these Ruby versions:
3.0.1
となりました。2.7.3の方にrailsが入っていないようです。
mimemagicエラー
ここで自分は、railsチュートリアルサンプルコードの例の「2.必要なパッケージをインストールし、bundle install(本番環境でのみ必要なgemはスキップ)します。」からもう一回やってみようと思い
$ yarn add jquery@3.4.1 bootstrap@3.4.1
$ bundle install --without production
を実行しました。すると元々出ていなかった
Installing mimemagic 0.3.10 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
An error occurred while installing mimemagic (0.3.10), and Bundler cannot continue.
Make sure that `gem install mimemagic -v '0.3.10' --source 'https://rubygems.org/'` succeeds before
bundling.
というエラーが発生しました💧
The rails' command exists in these Ruby versions:エラー解消できず😭
その後、一旦新たに発生したエラーは置いておいて、その前に発生していた
The rails' command exists in these Ruby versions:
のエラー解消のため、
$ gem update --system
$ gem install bundler
$ gem install rails
を実行しました。
(↓参考)
実行後railsのインストールができたかrails --version
にて確認しましたが、次は
Could not find rails-6.0.3, bcrypt-3.1.13
〜 一部省略で記載しています 〜
Run `bundle install` to install missing gems.
といったエラーが発生しました💧
再度bundle installするも失敗
そこでエラーメッセージにある通り再度bundle install
しました。
が、またも、、、
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
〜 一部省略で記載しています 〜
An error occurred while installing mimemagic (0.3.10), and Bundler cannot continue.
というエラーとなりました。
(↑上の方で$ bundle install --without production
した時に新たに発生したエラーがそのまま出ているようです)
shared-mime-infoをインストール
そこで、再度調べた情報を元に
brew install shared-mime-info
コマンドにて「shared-mime-info」をインストールし、再度
bundle install
をしてみました
(↓参考)
No such file or directory発生
すると次は
/Users/xxxxxx/.rbenv/shims/bundle: line 21: /usr/local/Cellar/rbenv/1.1.2/libexec/rbenv: No such file or directory
ということでディレクトリが見つかりませんというエラーが発生しました💧
rbenv rehashで事態が前進💪
ということでさらに調べた結果、
rbenv rehash
を実行するとbundle install
がうまく実行できるようになりました。
その結果、
$ rails --version
Rails 6.0.3
railsが入りました!
ちなみにrubyのバージョンを見ると
$ ruby -v
ruby 2.7.3p183 (2021-04-05 revision 6847ee089d) [x86_64-darwin20]
ということで2系になっています
(↓参考)
Yarnのエラー
当初の目的通り、railsチュートリアルのrails db:migrate
を実行すると
warning Integrity check: System parameters don't match
error Integrity check failed
error Found 1 errors.
========================================
Your Yarn packages are out of date!
Please run `yarn install --check-files` to update.
========================================
To disable this check, please change `check_yarn_integrity`
to `false` in your webpacker config file (config/webpacker.yml).
yarn check v1.22.17
info Visit https://yarnpkg.com/en/docs/cli/check for documentation about this command.
ということでまたもエラーが発生しました💦
ようやく解決へ
こちらに関しては、
yarn install --check-files
を実行することでrails db:migrate
が実行できるようになりました!
これだけだとCSSがうまく機能しないことがあるようで、その場合
yarn upgrade
も実行すると良いようです!
(↓参考)
これにてようやく解決し、
rails db:migrate
の実行、
rails test
rails db:seed
rails s
にてサーバー起動後http://localhost:3000/
にアクセスしてサンプルを動かすことができました!
おわりに
お読みいただきありがとうございました。
この記事が誰かのお役に立てるかは微妙ですが、エラーとの戦いの記録として残しました😅
初学者の方々、一緒に頑張っていきましょう〜😄