Ruby2.1.1 + Rails4.1.0 + MySQL5.6.17 でScaffoldしてみた。

なんか躓いて、一晩泣くハメになった。
今日、お昼頃に成功したんで「やったー!」と叫びました。
備忘録として作業メモを作っておきましょう。

MySQLはユーザアカウントの管理がキビしいので、まず、インストール済みのMySQLに作業用アカウントをつくることから始めてみた。

MySQLにはrootアカウントで入って、こんな感じで作業用カウントを作ってみた。

mysql > GRANT ALL ON *.* TO 'hogehoge'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

意味的には、'password'というパスワードで'localhost'から接続する'hogehoge'というユーザに管理者権限をつけるという感じ。ここら辺はちゃんと権限管理をすべきなんだろうけれど、いまは先を急ぐのでこれで行くよ。''は必要なので書き落とさないように注意。

じゃ、まずはRailsアプリを新規作成。
データベースはMySQLを指定。

[hogehoge@centos ~]$ rails new rails_app --database=mysql
      create 
      create  README.rdoc
      create  Rakefile
      create  config.ru
      create  .gitignore
      create  Gemfile
      create  app
      create  app/assets/javascripts/application.js
      create  app/assets/stylesheets/application.css
      create  app/controllers/application_controller.rb
      create  app/helpers/application_helper.rb
      create  app/views/layouts/application.html.erb
      create  app/assets/images/.keep
      create  app/mailers/.keep
      create  app/models/.keep
      create  app/controllers/concerns/.keep
      create  app/models/concerns/.keep
      create  bin
      create  bin/bundle
      create  bin/rails
      create  bin/rake
      create  config
      create  config/routes.rb
      create  config/application.rb
      create  config/environment.rb
      create  config/secrets.yml
      create  config/environments
      create  config/environments/development.rb
      create  config/environments/production.rb
      create  config/environments/test.rb
      create  config/initializers
      create  config/initializers/backtrace_silencers.rb
      create  config/initializers/cookies_serializer.rb
      create  config/initializers/filter_parameter_logging.rb
      create  config/initializers/inflections.rb
      create  config/initializers/mime_types.rb
      create  config/initializers/session_store.rb
      create  config/initializers/wrap_parameters.rb
      create  config/locales
      create  config/locales/en.yml
      create  config/boot.rb
      create  config/database.yml
      create  db
      create  db/seeds.rb
      create  lib
      create  lib/tasks
      create  lib/tasks/.keep
      create  lib/assets
      create  lib/assets/.keep
      create  log
      create  log/.keep
      create  public
      create  public/404.html
      create  public/422.html
      create  public/500.html
      create  public/favicon.ico
      create  public/robots.txt
      create  test/fixtures
      create  test/fixtures/.keep
      create  test/controllers
      create  test/controllers/.keep
      create  test/mailers
      create  test/mailers/.keep
      create  test/models
      create  test/models/.keep
      create  test/helpers
      create  test/helpers/.keep
      create  test/integration
      create  test/integration/.keep
      create  test/test_helper.rb
      create  tmp/cache
      create  tmp/cache/assets
      create  vendor/assets/javascripts
      create  vendor/assets/javascripts/.keep
      create  vendor/assets/stylesheets
      create  vendor/assets/stylesheets/.keep
         run  bundle install
Fetching gem metadata from https://rubygems.org/...........
Fetching additional metadata from https://rubygems.org/..
Resolving dependencies...
Using rake 10.3.1
Using i18n 0.6.9
Using json 1.8.1
Using minitest 5.3.3
Using thread_safe 0.3.3
Using tzinfo 1.1.0
Using activesupport 4.1.0
Using builder 3.2.2
Using erubis 2.7.0
Using actionview 4.1.0
Using rack 1.5.2
Using rack-test 0.6.2
Using actionpack 4.1.0
Using mime-types 1.25.1
Using polyglot 0.3.4
Using treetop 1.4.15
Using mail 2.5.4
Using actionmailer 4.1.0
Using activemodel 4.1.0
Using arel 5.0.1.20140414130214
Using activerecord 4.1.0
Using bundler 1.6.2
Using coffee-script-source 1.7.0
Using execjs 2.0.2
Using coffee-script 2.2.0
Using thor 0.19.1
Using railties 4.1.0
Using coffee-rails 4.0.1
Using hike 1.2.3
Using multi_json 1.9.2
Using jbuilder 2.0.6
Using jquery-rails 3.1.0
Using mysql2 0.3.15
Using tilt 1.4.1
Using sprockets 2.11.0
Using sprockets-rails 2.1.3
Using rails 4.1.0
Using rdoc 4.1.1
Using sass 3.2.19
Using sass-rails 4.0.3
Using sdoc 0.4.0
Using spring 1.1.2
Using turbolinks 2.2.2
Using uglifier 2.5.0
Your bundle is complete!
Use `bundle show [gemname]` to see where a bundled gem is installed.
         run  bundle exec spring binstub --all
* bin/rake: spring inserted
* bin/rails: spring inserted

で、rails_app内のGemfileを編集する。

[hogehoge@centos ~]$ cd rails_app
[hogehoge@centos ~]$ vi Gemfile

で、Gemfileを開き、これ(↓)のコメントアウトを外す(#を取り除く)
gem 'therubyracer',  platforms: :ruby

で、再度コメントアウトしたファイルをbundleインストールする。

[hogehoge@centos rails_app]$ bundle install
Resolving dependencies...
Using rake 10.3.1
Using i18n 0.6.9
Using json 1.8.1
Using minitest 5.3.3
Using thread_safe 0.3.3
Using tzinfo 1.1.0
Using activesupport 4.1.0
Using builder 3.2.2
Using erubis 2.7.0
Using actionview 4.1.0
Using rack 1.5.2
Using rack-test 0.6.2
Using actionpack 4.1.0
Using mime-types 1.25.1
Using polyglot 0.3.4
Using treetop 1.4.15
Using mail 2.5.4
Using actionmailer 4.1.0
Using activemodel 4.1.0
Using arel 5.0.1.20140414130214
Using activerecord 4.1.0
Using bundler 1.6.2
Using coffee-script-source 1.7.0
Using execjs 2.0.2
Using coffee-script 2.2.0
Using thor 0.19.1
Using railties 4.1.0
Using coffee-rails 4.0.1
Using hike 1.2.3
Using multi_json 1.9.2
Using jbuilder 2.0.6
Using jquery-rails 3.1.0
Using libv8 3.16.14.3
Using mysql2 0.3.15
Using tilt 1.4.1
Using sprockets 2.11.0
Using sprockets-rails 2.1.3
Using rails 4.1.0
Using rdoc 4.1.1
Using ref 1.0.5
Using sass 3.2.19
Using sass-rails 4.0.3
Using sdoc 0.4.0
Using spring 1.1.2
Using therubyracer 0.12.1
Using turbolinks 2.2.2
Using uglifier 2.5.0
Your bundle is complete!
Use `bundle show [gemname]` to see where a bundled gem is installed.

無駄なインストールが続いているような気がするけれど、therubyracer 0.12.1 が追加インストールされた。

じゃ、scaffoldの準備に取りかかりますか。

[hogehoge@centos rails_app]$ rails g scaffold Ranking name:string score:integer
      invoke  active_record
      create    db/migrate/20140420023921_create_rankings.rb
      create    app/models/ranking.rb
      invoke    test_unit
      create      test/models/ranking_test.rb
      create      test/fixtures/rankings.yml
      invoke  resource_route
       route    resources :rankings
      invoke  scaffold_controller
      create    app/controllers/rankings_controller.rb
      invoke    erb
      create      app/views/rankings
      create      app/views/rankings/index.html.erb
      create      app/views/rankings/edit.html.erb
      create      app/views/rankings/show.html.erb
      create      app/views/rankings/new.html.erb
      create      app/views/rankings/_form.html.erb
      invoke    test_unit
      create      test/controllers/rankings_controller_test.rb
      invoke    helper
      create      app/helpers/rankings_helper.rb
      invoke      test_unit
      create        test/helpers/rankings_helper_test.rb
      invoke    jbuilder
      create      app/views/rankings/index.json.jbuilder
      create      app/views/rankings/show.json.jbuilder
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/rankings.js.coffee
      invoke    scss
      create      app/assets/stylesheets/rankings.css.scss
      invoke  scss
      create    app/assets/stylesheets/scaffolds.css.scss

で、Ruby on Railsのモデルファイルが作成されたら、(この場合rails_app内の)configフォルダ内にあるdatabase.ymlのファイル内容をMySQLと接続するために書き換える。

[hogehoge@centos rails_app]$ cd config
[hogehoge@centos config]$ vi database.yml

 default: &default
  adapter: mysql2
  encoding: utf8
  pool: 5
  username: root
  password:
  socket: /var/lib/mysql/mysql.sock

となっているのをこんな感じに変更。

default: &default
  adapter: mysql2
  encoding: utf8
  pool: 5
  username: hogehoge
  password: password
  host: localhost
  socket: /var/lib/mysql/mysql.sock

hostの部分は、Rails ServerとMySQLサーバとの関係によって、Localhostだったり、特定のIPアドレスだったりするらしい。
configのディレクトリから一つ上に上がっておく。

[hogehoge@centos rails_app]$ rake db:create

問題がなければエラーを吐かずに、何事もなかったようにコマンド入力待ちになる。
データベースがMySQL上に作成されたはずなので、次にテーブルをデータベース内に作成する。

[hogehoge@centos rails_app]$ rake db:migrate
== 20140420055229 CreateRankings: migrating ===================================
-- create_table(:rankings)
   -> 0.0100s
== 20140420055229 CreateRankings: migrated (0.0101s) ==========================

これでテーブルも作られたらしい。
じゃあRails Serverを起動して結果を見てみよう。

[hogehoge@centos rails_app]$ rails server

Webブラウザを立ち上げて、アクセスしてみる。

※この時に、本当に気をつけて欲しいのは、URL表記のせいで、Routing Errorが出ても焦らないで欲しいということ。Railsのモデルを作成したとき、今回は確か「$ rails g scaffold Ranking name:string score:integer」としたので、モデル名はRankingと普通考えてしまう。だからWebブラウザでURLを「http://localhost:3000/ranking」とするとRouting Errorの表示が出るのでビックリする。
Railsの場合、モデル名は「複数形」になる(なってしまう?)ので、この場合のURLは「http://localhost:3000/rankings」と後ろにsをつけて複数形にすると、目的のページが表示されるはずだ。

こんな単純な落とし穴にハマって、昨夜から頭を抱えていたのがバカみたいだ。 (>_<)

0 件のコメント:

コメントを投稿