Fedora 16によるRuby on Rails 3.2.2環境の構築

■ Ruby on Rails 3.2.2環境を作る

VirtualBox上にインストールしたFedora 16でRuby on Rails 3.2.2環境を構築する。Linuxのディストリビューションは何でも良いと思うが、最新のRails環境を構築するにはできるだけ新しいものを用意した方が良いようだ。

  1. MySQLのインストール
  2. データベースの作成
  3. Ruby 1.9.3のインストール
  4. Ruby on Rails 3.2.2のインストール
  5. Railsアプリケーションの作成
  6. データベース設定と動作確認
  7. 補足

■ MySQLのインストール

Fedora 16はVirtualBoxの仮想マシンに予めインストールされているものとする。VirtulaBoxは4.1.10を利用した。Fedora 16のインストールの際には”ソフトウェア開発”等、ソフトウェアのコンパイルに必要なものを入れておけば良いだろう。また、Fedoraは”ソフトウェアの更新”で最新の状態にアップデートしてある。

MySQLはFedoraのインストール時にあわせて入れておいても良い。Railsで最低限必要なのは、

  • mysql-server-5.5.20-1.fc16
  • mysql-5.5.20-1.fc16
  • mysql-devel-5.5.20-1.fc16

の3つのパッケージである。パッケージ名を見ていただければお分かりと思うが、MySQLのバージョンは5.5である。Fedoraを起動したときにMySQLも自動的に起動させるためにchkconfigで設定する。

# chkconfig mysqld on
情報:'systemctl enable mysqld.service'へ転送しています。
ln -s '/lib/systemd/system/mysqld.service' '/etc/systemd/system/multi-user.target.wants/mysqld.service'

MySQLの文字コードをUTF-8に設定するために/etc/my.cnfで[mysqld]セクションに

character-set-server=utf8

を追加する。これをやらないとデータベースを作成したときに文字コードがUTF-8にならず、文字化けする原因となる。この後、Fedoraを再起動すればMySQLが使えるようになる。再起動せずにMySQLを使いたい場合はserviceコマンドでMySQLを起動する。

# service mysqld start
Redirecting to /bin/systemctl  start mysqld.service

■ データベースの作成

次に、MySQLにrootユーザで接続する。

$ mysql -u root

create databseでrails用データベースを作成する。データベースの名前は何でも良いが今回は"rails"データベースを作成する。

mysql> create database rails;
Query OK, 1 row affected (0.00 sec)

show databasesで作成されたデータベースを確認する。railsデータベースが作成されている。

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| rails              |
| test               |
+--------------------+
5 rows in set (0.00 sec)

useでrailsデータベースを使用(選択)する。

mysql> use rails;
Database changed

show tablesでrailsデータベース内のテーブルを確認する。

mysql> show tables;
Empty set (0.00 sec)

MySQLとの接続を終了するには\qコマンドを入力する。

mysql> \q

MySQLのrailsデータベースにrootユーザで接続するためのコマンドは以下である。これが問題なければRailsからも使える状態になっているはずである。

$ mysql -u root rails

■ Ruby 1.9.3のインストール

Ruby 1.9.3のインストールーの前にlibyamlを入れる必要がある。Fedoraの”ソフトウェアの追加/削除”等で以下の2つのパッケージを予め入れておく。

  • libyaml-0.1.4-1.fc16
  • libyaml-devel-0.1.4-1.fc16

ruby 1.9.3をRubyのダウンロードサイトよりダウンロードする。本稿執筆時点での最新版はruby-1.9.3-p125.tar.gz(もちろんtar.gzでなくても良い)である。

ダウンロードしたファイルを適当なディレクトリに展開する。(tar.gz以外をダウンロードした場合は展開コマンドが異なる。)

$ tar zxvf ruby-1.9.3-p125.tar.gz

展開されたディレクトリに移動してmakeする。make installだけはrootユーザにsuして行う必要がある。

$ cd ruby-1.9.3-p125/
$ ./configure
$ make
$ su
# make install

makeで生成されたファイル群が不要ならば通常ユーザに戻ってから削除する。

$ make clean

インストールがうまくいけば/usr/localにRubyの各種ファイルがインストールされているはずである。

$ ruby -v
ruby 1.9.3p125 (2012-02-16 revision 34643) [i686-linux]

■ Ruby on Rails 3.2.2のインストール

現在のgemの一覧を確認しておく。

$ gem list --local

*** LOCAL GEMS ***

bigdecimal (1.1.0)
io-console (0.3)
json (1.5.4)
minitest (2.5.1)
rake (0.9.2.2)
rdoc (3.9.4)

もし、ここで以下のようなメッセージが表示されたらlibyamlがインストールされていない。libyamlをインストールした後で、./configureからmake installまでの手順を再度行ってRubyを入れ直せば問題ない。

/usr/local/lib/ruby/1.9.1/yaml.rb:56:in `<top (required)>':
It seems your ruby installation is missing psych (for YAML output).
To eliminate this warning, please install libyaml and reinstall your ruby.

Railsのインストールは至って簡単で、基本的にはrootユーザで下記のコマンドを実行するだけである。ただし、インターネットに接続できる環境でなければならない。

# gem install rails

■ Railsアプリケーションの作成

試しにRailsアプリケーションを作成してみる。データベースには先ほどインストールしたMySQLを使う。

$ rails new test -d mysql

するとRailsで必要ないろいろなファイルが生成され、以下のようにパスワードの入力を促される。ここでログインしているユーザのパスワードを入力する。

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

Enter your password to install the bundled RubyGems to your system:


mobile は sudoers ファイルではありません。この事象は記録・報告されます。
Fetching gem metadata from https://rubygems.org/.........

Gem::Exception: Cannot load gem at [/usr/local/lib/ruby/gems/1.9.1/cache/rake-0.9.2.2.gem] in /home/mobile/rails/post
An error occured while installing rake (0.9.2.2), and Bundler cannot continue.
Make sure that `gem install rake -v '0.9.2.2'` succeeds before bundling.

Bundlerがsudoコマンドで何かをインストールしようとしているので、ログイン中のユーザ(この例ではmobile)がすべてのコマンドをroot権限で実行できるようvisudoで設定する。rootユーザにsuしてvisudoで以下の行を追加する。

mobile ALL=ALL

もし、ここでmysql.hが見つからないと言われたら、mysql-develがインストールされていないのでFedoraの”ソフトウェアの追加/削除”等でmysql-devel-5.5.20-1.fc16をインストールする。

mysql.h is missing.  please check your installation of mysql and try again.

また、上記を設定をすべて行ってもエラーが解消しない場合、rootになって適当なアプリケーションを作成し、Bundlerによるgemのインストールが終わったらまた一般ユーザに戻ってアプリケーションを作成するとうまくいくかも知れない。

一旦、作成済みのアプリケーションを削除してsmartphone_dbアプリケーションを作成する。パスワードの入力は再度求められたが、アプリケーションの作成はうまくいった。

$ rails new smartphone_db -d mysql

以下のようなメッセージが表示されたら成功である。

Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.

■ データベース設定と動作確認

アプリケーションの作成が成功したら、作成されたアプリケーションディレクトリのconfig/database.ymlを編集する。MySQLをrootユーザでパスワードなし、railsデータベースを使う場合は以下のようになる。

development:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: rails
  pool: 5
  username: root
  password:
  socket: /var/lib/mysql/mysql.sock

test:、及びproduction:についても同様に設定しておく。

データベースの設定が済んだら、いよいよscaffoldで各種ファイルの生成を行う。scaffoldは作成したアプリケーションのディレクトリで行う。

$ rails g scaffold phone name:string manufacturer:string price:integer release_date:date
      invoke  active_record
      create    db/migrate/20120316071539_create_phones.rb
      create    app/models/phone.rb
      invoke    test_unit
      create      test/unit/phone_test.rb
      create      test/fixtures/phones.yml
       route  resources :phones
      invoke  scaffold_controller
      create    app/controllers/phones_controller.rb
      invoke    erb
      create      app/views/phones
      create      app/views/phones/index.html.erb
      create      app/views/phones/edit.html.erb
      create      app/views/phones/show.html.erb
      create      app/views/phones/new.html.erb
      create      app/views/phones/_form.html.erb
      invoke    test_unit
      create      test/functional/phones_controller_test.rb
      invoke    helper
      create      app/helpers/phones_helper.rb
      invoke      test_unit
      create        test/unit/helpers/phones_helper_test.rb
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/phones.js.coffee
      invoke    scss
      create      app/assets/stylesheets/phones.css.scss
      invoke  scss
      create    app/assets/stylesheets/scaffolds.css.scss

scaffoldが成功したら、DBにマイグレーションする。

$ rake db:migrate
(in /home/kazumasa/rails/smartphone_db)
==  CreatePhones: migrating ===================================================
-- create_table(:phones)
   -> 0.2977s
==  CreatePhones: migrated (0.3001s) ==========================================

マイグレーションが成功したらWEBrickでアプリケーションを起動する。WEBrickの標準のポートは3000である。ポートを指定する場合はsの後に-p 1234等と指定すれば良い。

$ rails s
=> Booting WEBrick
=> Rails 3.2.2 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2012-03-16 16:17:43] INFO  WEBrick 1.3.1
[2012-03-16 16:17:43] INFO  ruby 1.9.3 (2012-02-16) [i686-linux]
[2012-03-16 16:17:43] INFO  WEBrick::HTTPServer#start: pid=6591 port=3000

これでRailsアプリケーションが作成できた。Fedoraのブラウザ(Firefox)でhttp://localhost:3000/phonesにアクセスして画面が表示されればOK。


■ 補足

config/database.ymlを設定した後はrails dbconsoleでMySQLクライアントを起動できる。

$ rails dbconsole

マイグレーションされたphonesテーブルの中身を確認するにはselectすれば良い。

mysql> select * from phones;
+----+----------------+-----------------------------+-------+--------------+---------------------+---------------------+
| id | name           | manufacturer                | price | release_date | created_at          | updated_at          |
+----+----------------+-----------------------------+-------+--------------+---------------------+---------------------+
|  1 | Xperia acro    | ソニー・エリクソン          | 50000 | 2011-07-09   | 2012-03-16 07:22:54 | 2012-03-16 07:22:54 |
|  2 | Galaxy SII LTE | サムスン                    | 60000 | 2011-11-24   | 2012-03-16 07:25:52 | 2012-03-16 07:25:52 |
+----+----------------+-----------------------------+-------+--------------+---------------------+---------------------+
2 rows in set (0.00 sec)
(2012/03/16)

新着情報
【iOS Objective-C, Swift Tips】バッジの表示(Swift)
【iOS Objective-C, Swift Tips】画像の向きを指定して保存する(Swift)
【iOS Objective-C, Swift Tips】UIImagePickerControllerの表示を日本語にする(Swift)

Copyright(C) 2004-2012 モバイル開発系(K) All rights reserved.
[Home]