Ruby on Railsの環境構築 その4 RailsとMySQLのインストール そしてRails server
- 2019.05.03
- 2019.08.08
- Ruby on Rails
- 素人が Ruby on Rails と Vue.js でブログサービスを作るまで
よこのじ(@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」であることを明記する表記です。
インストールしたら、次の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としています。
- 「i」でインサートモードに移行
- 記述したらEscキーでノーマルモードに移行
- 「:w」で上書き保存
- 「: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の使い方
- 「i」でインサートモードに移行
- 記述したらEscキーでノーマルモードに移行
- 「:w」で上書き保存
- 「: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」が作成できていることが確認できました。
MySQLの設定について分かりやすい記事
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」をブラウザに入力してアクセスすると・・・
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の勉強するだけであればクラウドIDEのPaizaCloudでサクッと環境構築しても良いと思います。
- 前の記事
Ruby on Railsの環境構築 その3 rbenvとruby-buildとRubyのインストール 2019.05.02
- 次の記事
Ruby on Rails コマンドや構文の記述 一覧 2019.05.13