rbenv でRuby のバージョン管理

## 状況・やりたいこと
とあるアプリをHerokuにアップしようとしたところ上手く行かなかった。

「rubyのバージョン（ruby-2.3.7）がサポート外」という記載があったのでrubyのバージョンを修正してみることに。

対象アプリは[Junaraさんの農産物直売所検索アプリ](https://qiita.com/junara/items/3e4f3fceaebf72171f93)だったので、Rubyのバージョンを記事に提示されていた**2.6.1に「変更する」**ことを目標とした。



## 現状の把握
まずは、現状のバージョン確認

```
$ ruby --version
ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin18]
```


## rbenvで2.6.1に切り替える
### バージョン切り替え前半
rbenvでインストール可能なrubyのバージョンを確認

```
$ rbenv install -l
```

→2.6.1が見当たらなかったので、brewアプデ。

```
$ brew update
$ brew upgrade rbenv ruby-build
```
改めてリスト表示。

```
$ rbenv install -l
  （省略）
  2.6.0-rc1
  2.6.0-rc2
  2.6.0
  2.6.1
  2.6.2
  2.7.0-dev
  （省略）
```
→出てきた！！！
rbenvでインストールしてみる。

```
$ rbenv install 2.6.1

$ ruby —version
ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin18]
```
→インストールしてみたが、バージョン2.6.1と出てこない。。（？）

```
$ rbenv versions
rbenv: version `ruby-2.3.7' is not installed (set by /Users/sayjoy/Desktop/free/tr_fuchu-nosanbutsu/.ruby-version)
  system
  2.4.1
  2.5.1
  2.6.1
```
→versions確認してみると、どこにも*が入っていない。なぜ？

ローカル環境に？2.6.1を適用？してみる。

```
$ rbenv local 2.6.1
```
ここで改めてversions。

```
$ rbenv versions
  system
  2.4.1
  2.5.1
* 2.6.1 (set by /Users/sayjoy/Desktop/free/tr_fuchu-nosanbutsu/.ruby-version)
```

きた！っぽい。
### rails s 起動確認
ここでサーバー起動してみるが、下記エラー。

```
$ rails s
Could not find activerecord-import-1.0.1 in any of the sources
Run `bundle install` to install missing gems.`
```
とりあえず下記コマンドを実行。

```
$ bundle install
```
再度rails sしてみるも、今度はmigrationができてない感じのエラー。
次はマイグレーションの実行。

```
$ bundle exec rake db:migrate
```
加えて、csvデータのインポートまで実行して、一旦起動は成功。

ただし、`ruby —version`の結果は変わらず。
この時点で2.6.1には変更できていない状況。


### バージョン切り替え後半

バージョン切り替えたのに上手く反映されない。。
[rbenvでバージョンがうまく切り替わらなかった時にやったこと](https://qiita.com/akatsuki174/items/c0384b9903b4b5cbbdaf)を参考にした。
原因は、環境変数（PATH）の設定ミスだということがわかった。「PATHを通す」というやつ。。
色々調べながら作業した内容は以下の通り。

Ruby がどのパスから呼ばれているか確認。

```
$ which ruby
/usr/bin/ruby
```

→状況としては、rbenv で入れたRuby じゃなくてシステムのデフォルトRuby が使われてる状態らしい。
rbenv のRuby が使われている場合、下記出力になるとのこと。
`/Users/ユーザー名/.rbenv/shims/ruby`
※パスが.rbenv配下のrubyを向いていればOK


PATHの確認。

```
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
```

PATHの編集。

```
$ open ~/.bash_profile
```
このコマンドを実行すると.bash_profile ファイルがでテキストエディットで開き、編集が可能となる。

下記２つの記述があればOKらしく、①が不足していたので追記した。
①`export PATH="$HOME/.rbenv/bin:$PATH"`
②`eval "$(rbenv init -)"`




.bash_profileに追記した追記した内容を反映させる。

```
$ source ~/.bash_profile
```

改めて、PATHの確認。（`echo $PATH`で確認しても同じ）

```
$ printenv PATH
/Users/sayjoy/.rbenv/shims:/Users/sayjoy/.rbenv/bin:/Users/sayjoy/.nodebrew/current/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
```
Rubyがどこから呼ばれているか、バージョンについて改めて確認。

```
$ which ruby
/Users/sayjoy/.rbenv/shims/ruby
```
→いい感じ！


```
$ ruby --version
ruby 2.6.1p33 (2019-01-30 revision 66950) [x86_64-darwin18]
```
→いい感じ！

バージョン切り替えに成功！！！

## Herokuへのアップリトライ（余談）
とりあえずこの記事で設定した目標「バージョンの切り替え」は達成。
しかし、改めて`git push heroku master`してみても前回同様のエラーが出てしまったので、引き続き頑張る。

```
$ git push heroku master
Counting objects: 7020, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (5716/5716), done.
Writing objects: 100% (7020/7020), 25.98 MiB | 946.00 KiB/s, done.
Total 7020 (delta 865), reused 7013 (delta 863)
remote: Compressing source files... done.
remote: Building source:
remote:
remote:  !     Warning: Multiple default buildpacks reported the ability to handle this app. The first buildpack in the list below will be used.
remote: 			Detected buildpacks: Ruby,Node.js
remote: 			See https://devcenter.heroku.com/articles/buildpacks#buildpack-detect-order
remote: -----> Ruby app detected
remote: -----> Compiling Ruby/Rails
remote:        Command: 'set -o pipefail; curl -L --fail --retry 5 --retry-delay 1 --connect-timeout 3 --max-time 30 https://s3-external-1.amazonaws.com/heroku-buildpack-ruby/heroku-18/ruby-2.3.7.tgz -s -o - | tar zxf - ' failed on attempt 1 of 3.
remote:        Command: 'set -o pipefail; curl -L --fail --retry 5 --retry-delay 1 --connect-timeout 3 --max-time 30 https://s3-external-1.amazonaws.com/heroku-buildpack-ruby/heroku-18/ruby-2.3.7.tgz -s -o - | tar zxf - ' failed on attempt 2 of 3.
remote:
remote:  !
remote:  !     An error occurred while installing ruby-2.3.7
remote:  !
remote:  !     This version of Ruby is not available on Heroku-18. The minimum supported version
remote:  !     of Ruby on the Heroku-18 stack can found at:
remote:  !
remote:  !     https://devcenter.heroku.com/articles/ruby-support#supported-runtimes
remote:  !
remote:  !     Push rejected, failed to compile Ruby app.
remote:
remote:  !     Push failed
remote: Verifying deploy...
remote:
remote: !	Push rejected to tr-fuchu-nosanbutsu.
remote:
To https://git.heroku.com/tr-fuchu-nosanbutsu.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/tr-fuchu-nosanbutsu.git'
```

→[HerokuにデプロイでRubyバージョンサポート外エラー](https://qiita.com/newburu/items/bb31ef2b429b5557b45a)を参考に、bundle install をやってみた。

```
$ bundle install
Your Ruby version is 2.6.1, but your Gemfile specified 2.3.7
```
→GemfileのRubyバージョンが2.3.7 のままだったので、2.6.1 に修正し、改めてbundle install。
その後改めてHerokuにアップ。

```
$ git push heroku master
（省略）
remote:  !
remote:  !     Failed to install gems via Bundler.
remote:  !     Detected sqlite3 gem which is not supported on Heroku:
remote:  !     https://devcenter.heroku.com/articles/sqlite3
remote:  !
remote:  !     Push rejected, failed to compile Ruby app.
remote:
remote:  !     Push failed
remote: Verifying deploy...
remote:
remote: !	Push rejected to tr-fuchu-nosanbutsu.
remote:
To https://git.heroku.com/tr-fuchu-nosanbutsu.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/tr-fuchu-nosanbutsu.git'
```

→恐らく、sqlite3 はHeroku でサポートされていないという意味かと。
改めて[Junraさんの記事](https://qiita.com/junara/items/3e4f3fceaebf72171f93#deploy--heroku%E3%81%AB%E3%82%A2%E3%83%83%E3%83%97%E3%81%97%E3%81%A6%E4%B8%96%E7%95%8C%E3%81%AE%E3%81%BF%E3%82%93%E3%81%AA%E3%81%AB%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%82%E3%82%89%E3%81%8A%E3%81%86)を確認すると、DBに関する記述を見落としていたことに気づき、Gemfileにpgに関する記述を追加。


```Gemfile.....
group :development, :test do
  gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]    #この記述は元々あった。
  gem 'sqlite3', '~> 1.3.10'
end

group :production do
  gem 'pg'
end
```
その後、bundle install したが下記エラーが発生。

```
$ bundle install
（省略）
An error occurred while installing pg (1.1.4), and Bundler cannot continue.
Make sure that `gem install pg -v '1.1.4' --source 'https://rubygems.org/'` succeeds before bundling.
```

どうやら、PostgreSQLのインストールが必要とのことなので下記コマンドを実行し、併せてbundle install。

```
$ brew install postgresql
$ bundle install
```

上手くいったので、git にpush して、Herokuにアップ。

```
$ git push heroku master
```
→OK！！


```
$ heroku open
``` 
その後、上記コマンドでアプリを開いてみたが、**「We're sorry, but something went wrong.」**というエラー画面が表示された。。
アプリ起動はできなかったが、Heroku へのアップ（push）が成功したので、今日はここまで。



## 宿題事項
- 「shims」ってなんだ？
- 「bundle install」とは。Rubyのバージョンを上げたら必要だった。必要な理由がいまいちピンときていないので要整理。。
- 「We're sorry, but something went wrong.」ってなんじゃい？