Rubyを勉強したいということでまず今回は環境構築メモをまとめることにしました。
今回の目的
Ruby on Railsの環境を構築し、ホストのブラウザからアクセスできるようにする。また、その際DBから取得したデータを出力するようにする。環境
○ホスト: ・MacOSX 10.11.5 ・Vagrant 1.5.1 ・VirtualBox 4.3.40 ○ゲスト: ・CentOS6.5 ・Ruby 2.3.1 ・Rails 5.0.0 ・MySQL 5.7Vagrantで構築したサーバにRuby on Railsの環境を作っていきます。
Macでやること
ターミナルでvagrantを使いローカルサーバを立てます。Vagrant
注)centOS6.5のboxをcentos6.5という名前で保持しています。$ vagrant init centos6.5
生成されたVagrantfileを少し修正してあげます。
config.vm.network "forwarded_port", guest: 80, host: 8080
↓
config.vm.network "forwarded_port", guest: 3000, host: 3000
# config.vm.network "private_network", ip: "192.168.33.10"
↓ コメント外す
config.vm.network "private_network", ip: "192.168.33.10"
Vagrantfileの修正が終わったら、
$ vagrant up
$ vagrant ssh
これでMacで行うことは終了です。
CentOSでやること
gitインストール
$ sudo yum install -y git
諸々パッケージインストール
$ sudo yum install -y gcc make glibc-headers openssl-devel readline libyaml-devel readline-devel sqlite-devel
rbenvインストール
$ cd ~
$ mkdir .rbenv
$ git clone git://github.com/sstephenson/rbenv.git .rbenv
パスを通す
``` $ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile $ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile $ exec $SHELL -l ```バージョンを確認してみる
$ rbenv --version
rbenv 1.0.0-31-gd0779fc
となればOK。
Rubyインストール
$ git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
$ rbenv install 2.3.1
$ rbenv global 2.3.1
注1)rbenv install 2.3.1は完了まで時間かかることがあります。
注2)rbenv installが失敗する
[root@localhost ~]# rbenv install 2.3.1
Downloading ruby-2.3.1.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.bz2
error: failed to download ruby-2.3.1.tar.bz2
BUILD FAILED (CentOS release 6.7 (Final) using ruby-build 20170914-2-ge40cd1f)
となる場合がある。私は
CentOS6.xのlibcurlが古くてcurl: (35) SSL connect errorが発生する件
https://qiita.com/shunsuke_takahashi/items/a1c3655584530c76fbe0
で解決しました。
バージョンを確認してみる
$ ruby -v
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-linux]
Railsインストール
$ gem install rails -v 5.0.0 --no-ri --no-rdoc
注)オプション --no-ri --no-rdoc をつけてインストール量を削ることで若干インストールが速くなります。
MySQLインストール
まず、すでにOSにMySQLが入ってないか確認します。5.7ではないものがあったら削除します。$ rpm -qa | grep mysql
mysql-libs-5.1.66-2.el6_3.x86_64
すでに5.1があったので削除します。
$ sudo yum remove mysql*
改めて5.7をインストールします。
$ sudo rpm --import http://dev.mysql.com/doc/refman/5.7/en/checking-gpg-signature.html
$ sudo rpm -ihv http://dev.mysql.com/get/mysql57-community-release-el6-7.noarch.rpm
$ yum --disablerepo=\* --enablerepo='mysql57-community*' list available
$ sudo yum --enablerepo='mysql57-community*' install -y mysql-community-server
これでMySQLのインストールが終了しました。
MySQLサーバ起動
$ sudo service mysqld start
これでMySQLの起動は完了!なのですが、chkconfigに登録をしておくと後で楽になります。
$ sudo chkconfig mysqld on
chkconfigまとめ
http://qiita.com/shell/items/30031862d91cedf9ceef
MySQLのrootユーザのパスワード
これでMySQLの起動も終わりました。しかし、rootユーザで入ろうと思ってもパスワードがわかりません。。。 ログの中にあるパスワードを探ってみようと思います。$ sudo cat /var/log/mysqld.log | grep 'password is generated'
これで初期パスワードが表示されます。このパスワードでMySQLに入り、rootユーザのパスワードを任意のものに変更しておきましょう。
$ mysql -u root -p
Enter password: パスワード
mysql >ALTER USER 'root'@'localhost' IDENTIFIED BY '新しいパスワード';
ここで注意なのが、新しいパスワードは「8文字以上の大小英数記号を組み合わせ」でなければいけない、ということです。
Railsプロジェクト作成
通常は$ rails new プロジェクト名
でプロジェクトが作成されますが、今回はMySQLを使いたいので
$ rails new プロジェクト名 -d mysql
とします。ここではプロジェクト名をbbsとします。
$ rails new bbs -d mysql
・・・・エラーが出てしまいました!!!
checking for mysql_query() in -lmysqlclient... no
-----
mysql client is missing. You may need to 'apt-get install libmysqlclient-dev' or
'yum install mysql-devel', and try again.
-----
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers. Check the mkmf.log file for more details. You may
need configuration options.
エラー文の中にある
$ yum install mysql-devel
を実行して、再度rails newしてみます。
今度はうまくいきました。
いろいろ調整
config/database.ymlを開いてみます。default: &default
adapter: mysql2
encoding: utf8
pool: 5
username: root
password: ここにパスワード入れる
socket: /var/lib/mysql/mysql.sock
development:
<<: *default
database: bbs_development
データベースのrootユーザを使ってはいるみたいな設定なのでrootユーザのパスワードを書き込んでやります。そして、bbs_developmentというデータベースを読み込みに行きそうな勢いなので、作成しておきます。
$ mysql -u root -p
Enter Password:
mysql> create database bbs_development;
Query OK, 1 row affected (0.11 sec)
Gemfile修正
Gemfileを開き、# gem 'therubyracer', platforms: :ruby
⇑ この行(17行目あたり)のコメントを外す
そして
$ bundle install
を実行する。
これでプロジェクトの準備はOK!サーバを起動してみましょう。
サーバ起動
$ rails s -b 0.0.0.0
そしてブラウザからアクセスしてみます。Vagrantfileに192.168.33.10というので設定しているので、192.168.33.10:3000でアクセスを試みます。
・・・・ずっとクルクルしてアクセスできない。。。
ログを見ると
Started GET "/" for 192.168.33.1 at 2016-09-13 15:49:07 +0000
Cannot render console from 192.168.33.1! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
となっていたので
Cannot render console from 10.0.2.2!と言われました
http://qiita.com/pugiemonn/items/f7956ba61012ca9fc16c
を参考にconfig/application.rbを編集してみました。
今度は。。

接続できました!!!
さて、次はページを作るためにコントローラを作成していきます。
コントローラ作成
トップ画面を作りたいのでtopというコントローラを作成する。$ rails g controller top index
Running via Spring preloader in process 30904
create app/controllers/top_controller.rb
route get 'top/index'
invoke erb
create app/views/top
create app/views/top/index.html.erb
invoke test_unit
create test/controllers/top_controller_test.rb
invoke helper
create app/helpers/top_helper.rb
invoke test_unit
invoke assets
invoke coffee
create app/assets/javascripts/top.coffee
invoke scss
create app/assets/stylesheets/top.scss
いろいろ自動生成してくれる。app/controllers/top_controller.rbを見てみましょう。
$ vi app/controllers/top_controller.rb
class TopController < ApplicationController
def index
end
end
ユーザテーブル作成
MySQLにユーザデータを格納するテーブルを作成してみます。 MySQLに直接入ってもできますが、railsのプロジェクトで使うものなので連携しやすいようにrailsコマンドとrakeコマンドで作成します。$ rails g model User uuid:string:unique name:string
Running via Spring preloader in process 4055
invoke active_record
create db/migrate/20160913135635_create_users.rb
create app/models/user.rb
invoke test_unit
create test/models/user_test.rb
create test/fixtures/users.yml
上のrails g model User..... のコマンドは以下の意味を持つ
・Usersというテーブルを作成する
・そのテーブルはuuid(uniqueなstring形式), name(string形式)のカラムを持っている。
・ただし、他にデフォルトで管理IDと作成日時、更新日時のカラムを生成する。
上は定義書を作成しただけに過ぎないのでDBに反映してあげる。
$ bin/rake db:migrate
Running via Spring preloader in process 4089
== 20160913135635 CreateUsers: migrating ======================================
-- create_table(:users)
-> 0.0157s
== 20160913135635 CreateUsers: migrated (0.0157s) =============================
これでテーブル完成!!
最後に、今回の目的であるDBからのデータ出力を行います。
DBから出力
ダミーデータ作成
モデルを作成すると、test/fixtures配下にダミーデータ作成用のファイルが作成されますのでそれを使います。中身を下記のように編集:
one:
uuid: AAAA
name: nameA
two:
uuid: BBBB
name: nameB
それでは読み込んでいきましょう。
データ出力
$ bin/rake db:fixtures:load FIXTURES=users
これでOKです。そしてtop_controller.rbを下記のように編集します。
class TopController < ApplicationController
def index
@user = User.all
@user.each{|u|
logger.debug('=========> ' + u.id.to_s + ', ' + u.name)
}
end
end
usersテーブルから全てのデータを取り出して、ループで回し、各データのidとnameカラムを出力するというものです。
実行(ブラウザでアクセス)してみましょう。サーバログに上記の出力がされていれば成功です。
ActiveRecord::SchemaMigration Load (0.4ms) SELECT `schema_migrations`.* FROM `schema_migrations`
Processing by TopController#index as HTML
User Load (0.4ms) SELECT `users`.* FROM `users`
=========> 298486374, nameB
=========> 980190962, nameA
Rendering top/index.html.erb within layouts/application
Rendered top/index.html.erb within layouts/application (1.0ms)
Completed 200 OK in 660ms (Views: 634.2ms | ActiveRecord: 2.5ms)
出力されました!
以上、rails環境を構築してDBからデータを取得&出力するまでのまとめでした。最後までお読みいただきありがとうございました。