Ruby on Railsの環境構築 その4 RailsとMySQLのインストール そしてRails server

よこのじ(@yokonoji_work)です。

Ruby on Railsの環境構築 その3 rbenvとruby-buildとRubyのインストール」でRubyのインストールとrbenvによるバージョン切り替えまで進めました。

今回は、データベース管理するためのMySQLと本命のRailsをインストールします。

Ruby on Railsの環境構築は、全4記事で構成されています。

Ruby on Railsの環境構築 その1 VagrantとVirtualBoxの理解とインストール
Ruby on Railsの環境構築 その2 Ubuntuのインストール
Ruby on Railsの環境構築 その3 rbenvとruby-buildとRubyのインストール
Ruby on Railsの環境構築 その4 RailsとMySQLのインストール そしてRails server

Railsのインストール

Railsをインストールするにあたって、まずはBundlerをインストールします。

Bundler とは、gem(Rubyのライブラリ)のバージョンを管理するツールです。バージョンが異なると動作に異常が出ることを防いだり、このgemを使うならこっちのgemも必要という依存関係の面倒を見てくれます(Gemfileに書かれたパッケージをインストールする)。

プロジェクトごとに設定できたり、チーム開発で同じ環境を使えるメリットがあるため、使えるようになっておきましょう。ちなみに、Bundler自体もgemです。

vagrantに接続している状態で、次のコマンドを入力します。

[email protected]:~$ rbenv exec gem install bundler

“rbenv exec” は「システムrubyのgem」ではなく「rbenvで現在有効なrubyのgem」であることを明記する表記です。

rbenvおよびbundlerの基本的な使用方法

インストールしたら、次の2つのコマンドを入力してbundlerのバージョンを確認します。

$ rbenv rehash
$ rbenv exec bundler -v
Bundler version 2.0.1

gemのリストやgemの保存場所は、次のコマンドで確認できます。

$ rbenv exec gem list
$ rbenv exec gem which bundler

プロジェクト用のディレクトリ「project」を作成して、Gemfileを作成します。

$ mkdir -p app/project
$ cd app/project
$ rbenv exec bundle init
Writing new Gemfile to /home/vagrant/app/project/Gemfile

vagrantの直下のディレクトリでは何らかのエラーの原因となる(?)そうなので、appディレクトリを作りさらにその下にprojectディレクトリを作成しています。

Gemfileを作成したら、編集します。

$ vi Gemfile
・・・
# gem "rails" → gem "rails", "5.2.3"
・・・

# gem “rails” という記述がありますので、vimの書き方にならい編集します。#を削除してコメントアウトを解除して、Rails公式サイトで確認した最新の5.2.3としています。

  1. 「i」でインサートモードに移行
  2. 記述したらEscキーでノーマルモードに移行
  3. 「:w」で上書き保存
  4. 「:q」で終了

なお、次のようにコマンド1つで書き換えることもできますが、以降のファイル編集もviコマンドで統一して進めていきます。

$ sed -i 's/# gem "rails"/gem "rails", "5.2.3"/g' Gemfile

バージョンの指定方法

gem "rails", "5.2.3"       5.2.3に固定
gem "rails", ">= 5.2.3"      5.2.3以上
gem "rails", ">= 5.2.3", "< 5.2.5"  5.2.3以上、5.2.5未満
gem "rails", "~> 5.2.3"      5.2.3以上(5.2.4~かつ5.3.Xは不可)

編集が終わったら、vender/bundle ディレクトリにRailsをインストールします。少し時間がかかります。

$ rbenv exec bundle install --path vendor/bundle
・・・
HEADS UP! i18n 1.1 changed fallbacks to exclude default locale.
But that may break your application.

Please check your Rails app for 'config.i18n.fallbacks = true'.
If you're using I18n (>= 1.1.0) and Rails (< 5.2.2), this should be
'config.i18n.fallbacks = [I18n.default_locale]'.
If not, fallbacks will be broken in your app by I18n 1.1.x.

For more info see:
https://github.com/svenfuchs/i18n/releases/tag/v1.1.0

何やら注意喚起が出ますが、Railsバージョンが5.2.2未満でなければ問題ないようです。問題になる場合はconfig/environments/production.rb ファイルを開いて「config.i18n.fallbacks = true」を「config.i18n.fallbacks = [I18n.default_locale]」に修正してください。

インストールできたら、インストールされたgemのリストを見てRailsがあることを確認しましょう。

$ rbenv exec bundle list
Gems included by the bundle:
・・・
* rails (5.2.3)
・・・

gem list と bundle list の違い

  • gem list コマンドは、「グローバルにインストールされたgemを一覧表示するコマンド」
  • bundle list コマンドは、「あるプロジェクトがbundlerによって管理されている場合に、そこで使用されているgemを一覧表示するコマンド」

bundle install –path vendor/bundleと、bundle listとgem listの違いについて

rails new コマンドを実行します。途中上書きするか質問されるのでyと答えます。

$ rbenv exec bundle exec rails new . --skip-bundle -d mysql
Overwrite /home/vagrant/app/project/Gemfile? (enter "h" for help) [Ynaqdhm] y

-d mysql はデータベースにMySQLを使う場合に付けます。SQLiteの場合は何も書かなくてOK。

https://github.com/rails/execjs」を参考に、JavaScriptランタイムをインストールします。

$ rbenv exec gem install execjs

MySQLのインストール

MySQLとは、データベース管理システムです。ProgateでのRuby on Rails学習を終えていればイメージしやすいかと思いますが、投稿情報やユーザーID/Passwordの情報はデータベースで管理されます。

ここまでの状態でrails serverを実行してもmysql2関連のエラー(Could not find gem ‘mysql2 ~)が発生しますので、必要となる libmysqlclient-dev をインストールします。

$ sudo apt-get -y install libmysqlclient-dev
$ rbenv exec bundle install --path vendor/bundle

次は mysql-server と mysql-client をインストールします。途中で Do you want to continue? [Y/n] と聞かれますので、yと答えてください。

$ sudo apt update
$ sudo apt install mysql-server mysql-client

インストールできたら、バージョン確認してみます。

$ mysql --version
mysql  Ver 14.14 Distrib 5.7.26, for Linux (x86_64) using  EditLine wrapper

次にMySQLに接続するためのパスワードを設定します。

$ sudo mysql_secure_installation

下記のように聞かれるので、各項目に答えてください。

パスワードの設定をするか聞かれるのでyと答える
Press y|Y for Yes, any other key for No: y 

パスワードの設定強度を聞かれる。とりあえず0=LOWで良い
(LOWは、8文字以上のパスワード)
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 0

設定するパスワードの入力を2回求められる。入力文字は表示されないので間違えないように入力
New password: 
Re-enter new password: 

入力したパスワードで良いか聞かれるので、yと答える
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y

匿名ユーザーを削除するか聞かれるので、yと答える
(誰でもログインできる状態になっているので、それをさせない)
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y

リモートでのrootログインを禁止するか聞かれるので、yと答える
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y

テストデータベースを削除するか聞かれるので、yと答える
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y

権限テーブルを読み込むか聞かれるので、yと答える
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y

パスワードの設定が完了したので、MySQLにログインします。

$ sudo mysql -u root -p

このコマンドはrootとしてログインしているということになりますので、プロジェクト用にユーザーを作成します(参考:MySQLでユーザを作成し、権限を設定する方法)。

mysql> GRANT ALL ON *.* TO 'user'@'localhost' IDENTIFIED BY 'password1234';
mysql> FLUSH PRIVILEGES;

ユーザー名:user/パスワード:password1234 で作成しています。

次のコマンドで、userが作成できたことが確認できます。

mysql> SELECT user, host FROM mysql.user;
+------------------+-----------+
| user                     | host          |
+------------------+-----------+
| debian-sys-maint | localhost |
| mysql.session       | localhost |
| mysql.sys             | localhost |
| root                     | localhost |
| user                     | localhost |
+------------------+-----------+
5 rows in set (0.00 sec)

確認したら、mysqlから抜けます。

mysql> exit

文字化けを防ぐための設定をついでにやっておきましょう。

$ sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

編集画面に移動しますので、矢印キーで[mysqld]を見つけ、一番下までカーソルを移動させて下記の記述を追加してください。

character-set-server = utf8
default_password_lifetime = 0

(文字コード変更のついでに、パスワードの有効期限を初期値の360日から永久に変更します)

vimの使い方

  1. 「i」でインサートモードに移行
  2. 記述したらEscキーでノーマルモードに移行
  3. 「:w」で上書き保存
  4. 「:q」で終了

編集を終了したら、MySQLを再起動して再度MySQLにログイン。

$ sudo /etc/init.d/mysql restart
$ sudo mysql -u root -p

サーバーとデータベースがutf8になっていることを確認してください。

mysql> status;
・・・
erver characterset:    utf8
Db     characterset:    utf8
・・・

設定ファイル database.yml を開き、作成したユーザー名とパスワードを入れてください。

$ vi config/database.yml
・・・
username: user
password: password1234
・・・

データベースを作成します。

$ bundle exec rake db:create
Created database 'project_development'
Created database 'project_test'

作成したユーザーでMySQLにログインします。

$ sudo mysql -u user -p

データベースが作成されたことを確認します。

mysql> SHOW DATABASES;
+---------------------+
| Database                 |
+---------------------+
| information_schema   |
| mysql                          |
| performance_schema |
| project_development |
| project_test                |
| sys                              |
+---------------------+

データベース「project_development」と「project_test」が作成できていることが確認できました。

Railsを立ち上げる

rails server コマンドを入力してみましょう。

$ rbenv exec bundle exec rails server -b 0.0.0.0
=> Booting Puma
=> Rails 5.2.3 application starting in development
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.12.1 (ruby 2.6.3-p62), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://0.0.0.0:3000
Use Ctrl-C to stop

http://192.168.33.10:3000」をブラウザに入力してアクセスすると・・・

立ち上げ成功 Yay You re on Rails

Railsの立ち上げに成功したでしょうか?お疲れ様でした。

いろいろなツールをインストールしてきて何がなんだかわからなくなりそうですが、このような形をイメージしてもらえると良いかと思います。

rbenvとRuby Bundlerとgemの関係

 

Ruby on Railsの環境構築は、全部で4記事あります。

Ruby on Railsの環境構築 その1 VagrantとVirtualBoxの理解とインストール
Ruby on Railsの環境構築 その2 Ubuntuのインストール
Ruby on Railsの環境構築 その3 rbenvとruby-buildとRubyのインストール
Ruby on Railsの環境構築 その4 RailsとMySQLのインストール そしてRails server

 

仮想環境でRailsを動かすための環境構築を行ってきましたけど、Railsの勉強するだけであればクラウドIDEのPaizaCloudでサクッと環境構築しても良いと思います。

Ruby on Rails入門 – はじめてのRuby on Railsチュートリアル