Windows(Ubuntu)でRubyとRailsのバージョン管理

はじめに

Rubyのバージョンが切り替えできないとGemインストール時にエラーが出まくるので、切り替えできるようにしました。

※Windows/Ubuntu環境で構築しました。

※現状、Windows/ubuntuローカル環境下はbundle updateを何回もしないといけないのでプロジェクト生成がだいぶしんどいです。。。

RubyInstallerでRubyのバージョン管理

※RubyInstallerはRubyのバージョンが細かく切り替えできないため、その後のRailsのバージョン管理に躓きました。

参考:Windowsでrubyをはじめよう

とあるプロジェクトをクローンしてgemをインストールしようとしたところ失敗したのでRubyのバージョンを切り替えてきます。
(今回はRuby 2.6→Ruby2.4)

インストールをRubyInstallerで行う。

ダウンロードした.exeファイルを起動してRubyインストール。
※pathはいったん追加しないようにチェック外す。

Cドライブ直下に以下の2つがインストールされた状態。

環境変数パスを以下のように26から24に変更する。

$ ruby -v
ruby 2.4.9p362 (2019-10-02 revision 67824) [x64-mingw32]

切り替わっている。

該当のRailsプロジェクトでbundle installするも変わらずエラー。

$ bundle install --path vendor/bundle
An error occurred while installing nokogiri (1.10.9), and Bundler
cannot continue.

UbuntuでRuby(rbenv)/Railsのバージョン管理

✅事前準備・確認

上のようにチェック入れる。

ubuntu上で確認。

$ ruby -v
ruby 2.5.7p206 (2019-10-01 revision 67816) [x86_64-linux]
$ rails -v
Rails 6.0.3

Cドライブに専用フォルダ作成

$ mkdir ubuntu-rails
$ ln -s /mnt/c/ubuntu-rails ~/rails

✅rbenvでRubyのバージョン管理

参考:rbenvでrubyのバージョンを管理する

※すでにrbenvはインストール済みです。

rbenvの確認

$ rbenv -v
rbenv 1.1.2-30-gc879cb0

インストール可能なrubyのバージョンを確認

$ rbenv install --list

プロジェクトで使っているRubyのバージョンをインストール

$ rbenv install 2.6.3

インストール済みのバージョンを確認

$ rbenv versions
system
2.5.1
* 2.5.7 (set by /home/chobi/.rbenv/version)
2.6.3

バージョン変更

$ rbenv global 2.6.3
$ rbenv versions
system
2.5.1
2.5.7
* 2.6.3 (set by /home/chobi/.rbenv/version)
$ ruby -v
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]

無事切り替わりました◎

次にrailsのバージョン管理をしていきます。

$ rails -v
Rails 6.0.3

railsをインストール

$ gem install rails -v 5.2.1
$ rails -v
Rails 6.0.3

🙄切り替わりませんね・・・

railsは簡単には切り替わらなそうです。。。(グローバルはやめた方がよさそう)

✅Railsのバージョン管理

Railsはプロジェクト下でBundlerを用いて管理していきます。

参考:

rails newの先輩オススメ手順

【初心者必見】Ruby on Railsで新規アプリケーションを作る際のお作法

①Gemfileの作成

$ bundle init

②Gemfileを編集

$ vim Gemfile
ruby '2.6.3
gem 'rails', '~> 5.2.1', '>= 5.2.1.1'
~~~その他もろもろ

※ここでプロジェクトのgemfileをすべてコピペするのがよさそう。

バージョン指定の記載方法

# バージョンを固定してインストール
gem '<ライブラリ名>', '<バージョン>'

# バージョンの範囲指定(下記例の場合:バージョン1.0.0以上、2.0.0未満)
gem '<ライブラリ名>', '>= 1.0.0, < 2.0.0'

# 指定のバージョン以上(下記例の場合:バージョン1.3.0以上使用可能)
gem '<ライブラリ名>', '>= 1.3.0'

# 指定のバージョンの系列のみ使用可能(下記例の場合:バージョン5.◯は使用可能だが3.◯や6.◯は使用不可)
gem '<ライブラリ名>', '~> 5.0'

③bundlerでgemをインストール

bundle install --path vendor/bundle

※bundle execとbin/railsは同義で、現在いるプロジェクト内でコマンドを叩くことができる。。

④Railsプロジェクトの作成

bundle exec rails new . --skip-bundle
# bundle exec rails new <インストールしたいディレクトリ> -d <使用したいDBMS> --skip-bundle

※とりあえずDBはsqlite3でいいので指定せず実行

※rails new時にバージョン指定しなくても既に指定したバージョンのrailsをプロジェクト下に入れて、かつnew時のbundleはスキップしているので問題なし。

Gemfileがoverwriteしていいかと聞かれる。

※Y/Nはケースバイケース。gemfileをプロジェクト丸まるコピペしているので今回はNで。

conflict Gemfile
Overwrite /mnt/c/ubuntu-rails/Gemfile? (enter "h" for help) [Ynaqdhm] N
skip Gemfile

完了後、railsのバージョンを確認

$ rails -v
/var/lib/gems/2.5.0/gems/railties-6.0.3/lib/rails/app_loader.rb:53: warning: Insecure world writable dir /home/chobi/.rbenv/shims in PATH, mode 040777
Your Ruby version is 2.5.7, but your Gemfile specified 2.6.3

$ bin/rails -v
Rails 5.2.4.3

$ bundle exec rails -v
Rails 5.2.4.3

$ ruby -v
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]

🙄よさげですね!!

※以前グローバルにインストールしてしまったrailsは消した方がよさそう。。。

⑤サーバー起動してみる

rails s

http://localhost:3000/にアクセス

無事起動しました✌

備忘録

✅ubuntuでVSCodeを起動する

WSL/Ubuntuの場合

sudo apt-get realpath
code . # ダウンロードが始まる

起動するとこうなる

※Atomの場合は初期設定不要で使うことができる。

atom .

✅AWSとWSL/UbuntuのSSH接続

①キーの作成

$ ssh-keygen

②id_rsa.pub(パブリックキー)の確認

$ cat ~/.ssh/id_rsa.pub

③公開鍵をIAM(AWS)に登録してSSHキーIDをコピー

④configファイルの作成

$ touch ~/.ssh/config

⑤configファイルの編集

$ vim ~/.ssh/config
Host git-codecommit.*.amazonaws.com
    User 先ほどコピーしたSSHキーID
    IdentityFile ~/.ssh/id_rsa

⑥ファイルのアクセス権限変更

$ chmod 600 ~/.ssh/config

⑦リポジトリをクローン

$ git clone ssh://git~~~~~~~~
# mv project_memo_app/ memo_app/ # ディレクトリ名変更(備忘録)

⑧クローンしたプロジェクトに移動してbundle install

$ bundle install --path vendor/bundle --jobs=4

エラー

Could not find nokogiri-1.10.9 in any of the sources

🙄なんでnew時でいけたGemfileと同じなのにcloneしたプロジェクトだとエラー出るんだろう。。。

再度インストールでなぜかインストールできる。

$ bundle install

DB作成

bin/rails db:create
bin/rails db:migrate
bin/rails db:seed

サーバー起動で確認できました◎

bin/rails s

http://localhost:3000/

※画面は伏せます

✅WSL/UbuntuとWindowsのファイル連携

参考:WSLとwindows間のファイル連携

ubuntuからCドライブへアクセスするには以下のようにコマンドを入力する。

/mnt/ドライブ名でubuntuからCドライブへの移動を試す。

$ cd /mnt/c
:/mnt/c$

🙄できましたね◎

デスクトップはcドライブ/users/ユーザー名/デスクトップなので、デスクトップに作成したフォルダのシンボリックリンクを作成する。

$ ln -s /mnt/c/Users/chobi/Desktop/rails ~/ubuntu-rails

※前述ですでに作成済み

おわりに

ひとまずWindowsでも、仕事で使えそうなRailsの環境を構築できたので良かったです◎

後述のVSCodeのターミナル切り替えを次はやりたい。

✅その他参考

Bundlerで並列処理??bundle installを爆速で処理する方法。

bundlerは並列処理も可能らしい。

UbuntuでDocker

※できてない

参考:

Ubuntu 18.04 LTS に Docker をインストールする,

Windows Subsystem for Linux + Docker for Windows を使えるようにするまでメモ

✅リポジトリ設定

①aptパッケージの更新

$ sudo apt update

※APT とは、ソフトウェアのインストールとアンインストールを自動的に行ない、ソフトウェアの管理を簡単に行えるようにするための仕組みの1つ。

②必要なパッケージのインストール

$ sudo apt install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common

③Docker公式 GPG公開鍵のインストール

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

※dockerのリポジトリを用いてインストール(公式も推奨)

④fingerprintにDockerがあることを確認

$ sudo apt-key fingerprint 0EBFCD88

⑤repository(stable)を追加

$ sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"

✅Dockerのインストール

①アップデート

$ sudo apt update

②最新版のインストール

$ sudo apt-get install docker-ce docker-ce-cli containerd.io

③バージョン確認

$ docker version
Client: Docker Engine - Community
Version: 19.03.12
API version: 1.40
Go version: go1.13.10
Git commit: 48a66213fe
Built: Mon Jun 22 15:45:36 2020
OS/Arch: linux/amd64
Experimental: false
$ docker --version
Docker version 19.03.12, build 48a66213fe

🙄インストールはできている模様

✅Docker Composeのダウンロード

$ curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose

✅Proxyサーバーの設定

※不要な気もする

①docker.service.dディレクトリの作成

$ sudo mkdir -p /etc/systemd/system/docker.service.d

②環境変数の追加

$ sudo vi /etc/systemd/system/docker.service.d/http-proxy.conf

追記して保存

[Service]
Environment="HTTP_PROXY=http://proxy.example.com:8080/"
Environment="HTTPS_PROXY=http://proxy.example.com:8080/"

③変更の適用

$ sudo systemctl daemon-reload

④再起動でエラー

$ sudo systemctl restart docker
System has not been booted with systemd as init system (PID 1). Can't operate.

動作確認エラー

$ sudo docker run --rm hello-world
docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
See 'docker run --help'.

調べたところ。。。

参考:WSLでdockerのインストールからdocker-composeまで動かす

WSLでdockerデーモンは立ち上げられないっぽい??

起動でエラー

$ sudo systemctl start docker
System has not been booted with systemd as init system (PID 1). Can't operate

docker for windowsのdockerデーモンを共有する

ubuntuからもlocalhostのポート2375をDOCKER_HOSTとして設定

$ export DOCKER_HOST=tcp://localhost:2375

確認

$ docker ps -a
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

🙄なかなか導入までハードルがありそうです。。。いったんステイ。

コメントを残す