Ruby on RailsでMySQLを使用する際に必要な作業手順

はじめに

RailsではデータベースとしてSQLite3をデフォルトで使用しますが、SQLite3ではなくMySQLを使用したかったので、RailsでMySQLを使用するために行った作業をメモしておきます。

環境と前提

  • サーバOS: ubuntu server 14.04
  • すでにRuby、Railsがインストール済である環境
  • Ruby 2.2.0
  • Rails 4.2.0


Rails用のMySQLユーザを作成

RailsがMySQLにアクセスできるように、Rails用のMySQLユーザを作成します。
そのためにまずは以下コマンドでMySQLにログインします。以下の場合はユーザ作成権限を持つrootでログインしています。なお、パスワードを聞かれるので、各自設定したパスワードを入力します。

ログイン後、以下コマンドでMySQLユーザを作成します。今回はRails用のMySQLユーザとしてユーザ名がrailsuser、パスワードがmypasswordであるユーザを作成します。

そして作成したrailsuserにデータベース作成やテーブル作成の権限を付与しておきます。

以上でユーザ作成は完了です。
ちなみに上記の場合は全てのデータベースとテーブルに対する全権限をrailsuserに付与していますが、特定のデータベースや処理を限定して権限を付与することも可能です。詳しくは下記サイトが参考になると思います。

ユーザ権限の確認・追加 | Qiita


ERROR 1396 (HY000)が表示された場合の解決策

もしMySQLユーザを作成しようとした際に以下の様なエラーが表示された場合、

すでにrailsuserという名前のユーザが作成済であることが原因である可能性が高いです。そこで、このような場合は以下のコマンドで作成済のMySQLユーザを確認し、必要ならば削除してからMySQLユーザを作成し直すといいと思います。


データベース設定ファイル修正

Rails用のMySQLユーザを作成完了後、今度は作成したユーザ情報をRailsのデータベース関連の設定ファイルに記述します。Railsではルートディレクトリ配下のconfig/database.ymlにRailsが使用するデータベースに関する設定を保持しています。ここには、MySQLに接続するためのユーザ名やパスワードの設定を含みます。今回は本番環境のMySQLにRails用のMySQLユーザとしてユーザ名がrailsuser、パスワードがmypasswordであるユーザを作成したのでこの情報をconfig/database.ymlに記述します。以下のようになります。

上記のようにconfig/database.ymlではdevelopmenttestproduction環境毎にデータベースの設定を記述することができます。また、config/database.ymlの中のdatabase:の後に続く値がRailsが各環境毎に使用するデータベース名となります。
以上でRailsのデータベース設定ファイルの修正は完了です。

Railsが使用するデータベース、テーブルを作成

続いてRailsが使用するデータベース、テーブルをrakeコマンドを使用して作成しておきます。まずは下記コマンドでデータベースを作成します。

上記コマンドを実行すれば、config/database.ymlで記述したdatabase:の後に続く値を名前として持つデータベースが作成されます。具体的には、

  • development環境用にRails_developmentという名前のデータベース
  • test環境用にRails_testという名前のデータベース
  • production環境用にRails_productionという名前のデータベース

がそれぞれ作成されます。もしproduction環境用のデータベースを作成したい場合は、下記のようにRAILS_ENV=の後に環境を指定してrakeコマンドを実行すればOKです。

上記でRAILS_ENV=productionのオプションを付けない場合はデフォルトではdevelopment環境の指定になります。

データベースを作成したら後は下記コマンドでマイグレーションを実行し、テーブルを作成します。

データベースの場合と同様に以下のようにすれば環境を指定してマイグレーションを実行してテーブル作成可能です。


遭遇したエラーと解決策

Mysql2::Error: Access deniedが表示された場合

bundle exec rake db:createbundle exec rake db:migrateを実行した時に以下のエラーが表示される場合があるかもしれません。

この場合は、表示の通りRailsからMySQLへのアクセスが拒否されているので、改めてconfig/database.ymlに記述した内容が合っているか、またRails用のMySQLユーザに適切な権限が付与されているかを確認すると手がかりがあるかもしれません。
なお、以下のコマンドでMySQLのユーザの権限を確認することができます。

上記のように表示されていれば、railsuserには全ての権限が付与されていることになります。

また、同様のエラーとして以下のエラーが表示される場合があるかもしれませんが、こちらも権限付与が適切でない、もしくはconfig/database.ymlに記述されている内容がMySQL側と合致していない可能性が高いです。config/database.ymlをもう一度確認するといいかもしれません。


LoadError: cannot load such file — readlineが表示された場合

bundle exec rake関連のコマンドを実行した時に、以下のようなエラーが表示されました。

これはRails4以上から必要になっているrb-readlineというパッケージがインストールされていないことが原因のようです。ただ、詳しく調べることができなかったので間違っているかもしれません。
解決策としては、Gemfileに以下を追記してbundle installでOKです。

もしくは、以下のようにgemコマンドでrb-readlineをインストールしてもOKです。


mysql2のインストール

RailsでMySQLをデータベースとして使用するために、以下をGemfileに忘れずに追記してbundle installし、mysql2パッケージをインストールしておく必要があります。

以上でRailsでMySQLを使用するために必要な作業は完了です。

mysql2関連のエラー

上記のようにGemfilegem 'mysql2'を追記してbundle installを実行した際に下記のようなエラーに遭遇しました。

このエラーはMySQL関連のライブラリがインストールされていないことが原因なので、解決策としては以下のようにapt-getで必要なパッケージをインストールすれば解決できます。

もし上記コマンドでlibmysqld-devをインストールしようとした時に今度は以下のようなエラーが出た場合は、

まずはlibmysqlclient18というパッケージを削除し、その後でlibmysqlclient-devをインストールするとうまくいくかもれしれません。
具体的には、以下のコマンドを実行します。

Installation of libmysqlclient-dev fails if libmysqlclient18 is from percona | MySQL


おわりに

RailsでMySQLを使おうとしたら思いの外色々なエラーに遭遇したのでメモしておきました。

このエントリーをはてなブックマークに追加

SPONSORED LINK

この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。

この投稿へのトラックバック

  1. […] RailsではデータベースとしてMySQLを使用。RailsでMySQLを使用するための設定も完了済の環境(参考:Ruby on RailsでMySQLを使用する際に必要な作業手順) […]

トラックバック URL