Help us understand the problem. What is going on with this article?

【Rails】ruby、gem、rbenv、rails、bundler関係等適当まとめ。特にbundler

More than 3 years have passed since last update.

Macを触り始めて数ヶ月、Railsを使ってWebサービスを開発しようと思ったが一番最初にぶち当たった壁がRubyの関係や構成、運用方法だったりを適当にまとめます。
完璧私用メモとなってます。。。
Railsは最下層なので説明は省きます

参考記事
bundle install と updateの違い
Rails開発環境の構築(複数バージョン共存可能)(Homebrew編)

位置関係

位置関係を図で適当に表したらこうなります

bundlerでプロジェクトGemファイルを管理しない場合

rbenv
rbenv-->ruby
rbenv-->ruby-->gem
rbenv-->ruby-->gem-->rails

bundlerでプロジェクトGemファイルを管理する場合

rbenv
rbenv-->ruby
rbenv-->ruby-->bundler
rbenv-->ruby-->bundler-->gem
rbenv-->ruby-->bundler-->gem-->rails

各種説明

Ruby

・全ての元となる言語そのも
・これは説明は必要無いですね

$ ruby -v
>>ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin15]

gem

・Rubyの内部に組み込まれているRubyでのパッケージ管理システムのようなもの(apt-get等)
・Rubyの一部なのでRubyをインストールすると自動的にこのコマンドも使用することができる。
・Rubyの一部なので複数のRubyをインストールした場合、Gemはそれぞれ独立して存在している。
つまり、Ruby 2.2.2のGemにRailsをインストールしてもRuby 2.3.1にはインストールされない。

$ gem -v
>>2.5.1
$ gem install rails
>>↑でRailsがインストールされます。

rbenv

・Rubyのバージョンを管理する→Rubyの内部には無くRubyとは独立した存在である
・当然これでrubyのバージョンを切り替えると使用するgemも変わる
・ruby をインストール場合rbenvで管理できるためにrbenv install 2.3.1等でインストールする。

$ ruby -v
>>ruby 2.3.1p112

$ rbenv global 2.2.2
$ ruby -v
>>ruby 2.2.2p95

$ rbenv local 2.4.0-dev
$ ruby -v
>>ruby 2.4.0-dev

bundler

・gemを管理するやつ
・特徴として異なる開発環境上(複数人開発)で開発する場合Railsのバージョンなどに違いがあれば正常に動かないことが多いので、プロジェクトフォルダの中にRailsなどのパッケージファイルをインストールして、それを使用して開発を行うことが容易になるヤツ

下記に初期の手順を
"bundler init"でGemfileというパッケージリストを生成する(この中に記述されるパッケが使用される)
"bundler install"でGemfileのリストのパッケージをダウンロードインストール
これで仮にrailsをインストールした場合は、
"bundler exec rails s "でrailsサーバー起動が起動します。
※別途ファイルパスを設定する必要があったりします。

$ bundler init
$ bundler install
$ bundler exec rails s

・"bundler exec"経由で起動することでプロジェクトフォルダ内部にあるパッケージを利用します。これをせずにやると、PCにインストールされているものが利用されます。
下記の例だと、現在Ruby 2.3.1を使用していますが2.3.1のgemにはrailsはインストールされていなくRuby 2.2.2にはインストールされていますという警告が出てます。
ですが、bundler exec経由でコマンドを実行するとそのプロジェクトフォルダ内部のrailsを参照しているため使用することができるのです

$ ruby -v
>>ruby 2.3.1p112

$ rails -v
>>rbenv: rails: command not found

The `rails' command exists in these Ruby versions:
  2.2.2

$ bundler exec rails -v
>>Rails 5.0.0.1

バカヤロウ全然ちげーじゃねぇかって思ったすごい方のコメント等指摘お願いします。。。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした