はじめに
Ruby on Railsの共同開発に参加したところ、作業に取り掛かる前段階で、独りでローカルで開発するときとは違うエラーが出たので、解決までの一連の流れまとめました。(注:実務ではありません)
具体的にはリモートリポジトリをクローンして$ bundle exec rails g controller
を実行するところまでの解説になります。
ローカルの開発環境
mac OS Catalina
Rails バージョン:5.2.4.1
Ruby バージョン:2.6.3
共同開発プロジェクトの環境
Rails バージョン:5.2.4.1
Ruby バージョン:2.6.5
エラー発生から解決まで
bundlerに関するエラー発生
共同開発者のgithubからproject(仮名)リポジトリをローカルへクローン。僕の場合デスクトップへ
$ git clone "リモートリポジトリprojectのurl"
作業用ブランチを作成し、移動後以下のコマンドで第一エラー発生
$ rails g controller users
エラー内容
You must use Bundler 2 or greater with this lockfile. (Bundler::LockfileError)
エラー原因の同定(bundlerのバージョン)
Bundlerのバージョンに問題があるようなので、以下のコマンドでbundlerのバージョンを調べると
$ bundle -v
またもやエラー発生。Gemfile.lockで要求されている**'bundler' (2.1.4)**がないことが原因と教えてくれている。
Could not find 'bundler' (2.1.4) required by your /Users/hoge/Desktop/project/Gemfile.lock. (Gem::GemNotFoundException)
To update to the latest version installed on your system, run `bundle update --bundler`.
To install the missing version, run `gem install bundler:2.1.4`
では自分はどのバージョンなら持っているのか?それすら分からない。
ググってみると、インストールされているbundlerのバージョンを以下のコマンドで確認できるらしい。
https://qiita.com/YumaInaura/items/64e5721549e4927ce85f
$ gem list bundler
*** LOCAL GEMS ***
bundler (1.17.3, default: 1.17.2)
結果を見てみると、1.17.3と1.17.2は持っているようだ。
確かに2.1.4はない。
ここで二つの選択肢が生まれた。
- Gemfile.lockで指定されているbundlerのバージョンを下げる
- ローカルのbundlerのバージョンを上げる
共同開発Gの経験あるリーダーに訊いてみると、共同開発全体に影響が出てしまうのでローカルで対応すべしとのこと。よって選択肢2に進む。
エラー解決へのアクション(bundlerインストール)
特定のバージョンのgemをインストールするためには以下のコマンドが使える。バージョン2.1.4を指定してインストールした。You don't have write permissions
と怒られたので、馬鹿の一つ覚えでsudo
を頭につけてみるとパスワードを要求されたが、入力するとインストールが始まり10秒で終わった。
https://qiita.com/YumaInaura/items/64e5721549e4927ce85f
$ gem install bundler -v x.y.z(バージョン)
↑これは怒られた。
↓これでクリア
$ sudo gem install bundler -v x.y.z(バージョン)
Password:
Fetching bundler-2.1.4.gem
Successfully installed bundler-2.1.4
Parsing documentation for bundler-2.1.4
Installing ri documentation for bundler-2.1.4
Done installing documentation for bundler after 2 seconds
1 gem installed
再度インストール状態を確認すると、やったー、バージョン2.1.4がインストールされている!
$ gem list bundler
*** LOCAL GEMS ***
bundler (2.1.4, 1.17.3, default: 1.17.2)
では、現在のbundlerバージョンはどれになっているのだろう?調べてみると、、
$ bundle -v
Bundler version 2.1.4
お、なぜかは分からないが、2.1.4が設定されている。ちなみにバージョン指定はbundle _x.y.z_ install
で、できる。
ということは今ならGemfile.lockの要求条件(bundlerバージョン2.1.4)を満たせているのだろうか?いざ参る!!
rubyバージョンに関するエラー発生
$ rails g controller users
...
何十行ものエラー文
...
Your Ruby version is 2.6.3, but your Gemfile specified 2.6.5 (Bundler::RubyVersionMismatch)
はい、ここで一句。一難去ってまた一難。エラーの先にはまだ見ぬエラー。
しかし、これは分かりやすいぞ。今度はRubyのバージョンを合わせれば良いのだな。
エラー解決へのアクション(rbenvでrubyバージョン管理)
rubyのバージョンはrbenvで管理できるはず。rbenvのインストールなどに関してはProgateで詳解あり(閲覧するには有料会員になる必要有りかもです)。
https://prog-8.com/docs/ruby-env
rubyのバージョン指定する流れはざっくりいうと
- homebrewインストール
- homebrewでrbenvインストール
- rbenvで好きなrubyバージョンをインストール
- rbenvでバージョン指定
となる。
僕は2まで終わっていたので、ruby2.6.5をrbenvでインストールすれば良いはず。
以下のコマンドで実行
$ rbenv install 2.6.5
時間が結構かかるが、無事インストール完了。
インストールされたrubyバージョンを確認するとこんな感じ。(2.5.0は以前インストールしていた)
$ rbenv versions
* system
2.5.0
2.6.5
rbenv global x.y.z
などを用いてrubyバージョンの切り替えに成功。ここら辺理解が浅いので先輩方の参考記事をご覧ください。切り替えが上手くいかない原因はパスの設定によることが多いようです。
https://qiita.com/opiyo_taku/items/3312a75d5916f6cd32b1
https://qiita.com/akatsuki174/items/c0384b9903b4b5cbbdaf
$ ruby -v
ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-darwin19]
gem欠落に関するエラー発生から解決まで
よし今度こそ行くぞ、ということで$ rails g controller users
を実行するもエラー発生。
$ bundle exec rails g controller users
Could not find rake-13.0.1 in any of the sources
Run `bundle install` to install missing gems.
rakeに関するgemがないことが分かった。指示に従い、辛抱強くbundle install --path vendor/bundle
を実行
--path vendor/bundle
はインストールをプロジェクト内のフォルダ(vendor/bundle)に対して行うよう指定するもの。
インストールが終わり、もう一度挑戦する。
$ bundle exec rails g controller users
Running via Spring preloader in process 64840
create app/controllers/users_controller.rb
invoke erb
create app/views/users
invoke helper
create app/helpers/users_helper.rb
invoke assets
invoke js
create app/assets/javascripts/users.js
invoke scss
create app/assets/stylesheets/users.scss
やったー。コントローラーが作れたぞー!
コントローラーを作るだけならコマンドはいらないが、おそらくrails g model
とかrails s
で結局同様につまづくと思われる。