sk

開発で得たこと

5分でRailsアプリにMySQLを導入

f:id:sksksksksk:20170510232333p:plain

RailsアプリにMySQLを導入します。


サンプルコード
https://github.com/sagaekeiga/MySQL

MySQL2のインストール

gem 'mysql2'
bundle

MySQLの起動

mysqlを起動します。

$ mysql-ctl start

初期設定とデータベース・テーブルの作成

$ SET PASSWORD FOR 'root'@'localhost' = PASSWORD('パスワード'); #rootユーザーのパスワードを変更

$ CREATE DATABASE データベース名 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; #データベースの作成

$ GRANT ALL ON データベース名.* TO 'ユーザー名(任意)'@'localhost'; #ユーザー(任意)にデータベースの権限をrootユーザーから移譲

$ SET PASSWORD FOR 'ユーザー名(任意)'@'localhost' = PASSWORD('パスワード'); #ユーザー(任意)のパスワードをセット

・パスワードは任意です。最初のパスワードはrootユーザーのパスワードです。二番目のパスワードは新規で作成したユーザーのパスワードです。

・データベース名はなんでも構いません。わかりやすいものをつけましょう。

以下、補足です。

$ show databases; #データベース確認コマンド
$ SHOW TABLES; #テーブル確認コマンド
$ select user,host from mysql.user; #登録ユーザーの状況確認コマンド

私は以下のように設定しました。

$ mysql -u root#rootユーザーでログイン

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('s19930528');

mysql>CREATE DATABASE sample_database DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;                                                    

mysql> GRANT ALL ON sample_database.* TO 'sample'@'localhost';                                                                                            

mysql> SET PASSWORD FOR 'sample'@'localhost' = PASSWORD('secret');                                                                               

mysql> quit

アプリ側の設定

mysqlの準備は整いましたので、アプリ側の設定に移ります。

mysqlとアプリを連携させる為にはdatabase.ymlを設定する必要があります。



/config/database.yml

----削除----
default: &default
  adapter: sqlite3
  pool: 5
  timeout: 5000
----削除----

development:
    adapter: mysql2
    encoding: utf8
    database: sample_database
    username: sample
    host: localhost
    password: secret
    socket: /var/run/mysqld/mysqld.sock

test:
    adapter: mysql2
    encoding: utf8
    database: sample_database
    username: sample
    host: localhost
    password: secret
    socket: /var/run/mysqld/mysqld.sock

mysqlで設定した内容を反映させます。

ここで重要なのはmysql.sockの指定です。

mysql.sockの場所は以下のコマンドで確認できます。
mysqlからでた状態でコマンドを実行してください。

$ mysql_config --socket
/var/run/mysqld/mysqld.sock

アプリを作成し、接続できたかを確認

$ rails g model post title:text content:text
$ rake db:migrate

/db/seed.rb

Post.create!(title:  "テスト",
             content: "テスト")
$ rake db:seed
$ rails c
2.3.0 :001 > Post.all
  Post Load (0.4ms)  SELECT `posts`.* FROM `posts`
 => #<ActiveRecord::Relation [#<Post id: 1, title: "テスト", content: "テスト", created_at: "2017-05-08 11:06:37", updated_at: "2017-05-08 11:06:37"

できました!

ProgateやRailsチュートリアル、プログラミングスクールを通い終えたが現場のコードはかけない、

一体どうやって書くの?と思っているエンジニアのみなさんのためのチュートリアルを公開しています。

チュートリアル