Ruby on Railsを触ることになったので、Ruby on Rails チュートリアルを参考にしながら作成記録のメモ
環境
- CentOS6.4
- Rails 4.0.4
事前準備に必要なもの
-
Ruby 2.x
-
インストールされていない場合は【Rails4】 インストール編
を参考してください。 -
プロジェクトの作成をしていない場合は【Rails4】 プロジェクトの作成 rails newを参考にしてください。
-
前の記事は【Rails4】 gemライブラリを吟味するです。
-
MYSQL
-
インストールされていない場合はvirtualbox(centos)でMYSQLインストールメモ(mysqld_multiで複数インスタンス起動まで)を参考してください。
参考にしたサイト
とりあえずユーザー一覧は必要でしょ
こんな事やったら途中で設計ミスで死ぬパターンになるんですかね???
とりあえず練習として
- name (ユーザー名)
- email (メールアドレス)
の2つでもあればいいか。。。。
まあいいかとりあえず作ってみよう
と適当にやっていきます。
アプリケーションに必要なコントローラ、モデル、ビューをまとめて生成(rails generate scaffold)
Railsドキュメント#アプリケーションに必要なコントローラ、モデル、ビューをまとめて生成(rails generate scaffold)を読んでとりあえず作成してみます。
【注意】命名規則について
Ruby on Rails チュートリアル#第2章デモアプリケーション#2.4最後にの注意事項に書かれていますが
scaffoldにおける命名は、モデル名の命名の習慣に従っています。リソースやコントローラは複数形で表し、モデルは単数形で表すのが普通です。UsersではなくUserとしたのはこのためです。
と書かれていますので単数形、複数形の取り扱いには気をつけましょう。scaffoldコマンドCamelケースの単数形で実行すると自動的にモデルは単数形、コントローラー、Viewは複数形にしてくれます。
上記を踏まえた上でまずはドライランオプションで作られるMVCを確認
-p がドライランモードです
rails g scaffold User name:string email:string -p
invoke active_record
create db/migrate/20140402113547_create_users.rb
create app/models/user.rb
invoke rspec
create spec/models/user_spec.rb
invoke resource_route
route resources :users
invoke scaffold_controller
create app/controllers/users_controller.rb
invoke erb
create app/views/users
create app/views/users/index.html.erb
create app/views/users/edit.html.erb
create app/views/users/show.html.erb
create app/views/users/new.html.erb
create app/views/users/_form.html.erb
invoke rspec
create spec/controllers/users_controller_spec.rb
create spec/views/users/edit.html.erb_spec.rb
create spec/views/users/index.html.erb_spec.rb
create spec/views/users/new.html.erb_spec.rb
create spec/views/users/show.html.erb_spec.rb
create spec/routing/users_routing_spec.rb
invoke rspec
create spec/requests/users_spec.rb
invoke helper
create app/helpers/users_helper.rb
invoke rspec
create spec/helpers/users_helper_spec.rb
invoke jbuilder
create app/views/users
create app/views/users/index.json.jbuilder
create app/views/users/show.json.jbuilder
invoke assets
invoke coffee
create app/assets/javascripts/users.js.coffee
invoke scss
create app/assets/stylesheets/users.css.scss
invoke scss
create app/assets/stylesheets/scaffolds.css.scss
問題がなければ、ドライランオプションを外して作りましょう
rails g scaffold User name:string email:string
プロジェクト用のDBを作成する
rake db:create
migrateを実行する
マイグレーション分からない方はRailsドキュメント#マイグレーションとはを一読してください
rake db:migrate
== 20140402113618 CreateUsers: migrating ======================================
-- create_table(:users)
-> 0.0082s
== 20140402113618 CreateUsers: migrated (0.0083s) =============================
作成されたテーブルの確認
確認しましょう
mysql -u{ユーザー名} -p -e "use rpanda_development; show tables;"
+------------------------------+
| Tables_in_rpanda_development |
+------------------------------+
| schema_migrations |
| users |
+------------------------------+
usersというテーブルができています
railsサーバーを起動する
railsに搭載されているサーバーを起動しましょう。簡単です。
# sはserverの略
rails s
=> Booting WEBrick
=> Rails 4.0.4 application starting in development on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
[2014-04-02 20:40:06] INFO WEBrick 1.3.1
[2014-04-02 20:40:06] INFO ruby 2.0.0 (2013-11-22) [x86_64-linux]
[2014-04-02 20:40:06] INFO WEBrick::HTTPServer#start: pid=22345 port=3000
portが3000番で起動していますね。
portが開いているか確認する
自分はVagrantで作成したvirtualboxで作成をしています。でよく忘れがちなのがportを開いておらず、ホストOS側から見れない現象です。
自分のメモ用に残しておきます
Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
# これ追加
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3000 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
iptablesの再起動
sudo /etc/init.d/iptables restart
ブラウザで見れるか確認
自分のゲストOS側のIPアドレスは192.168.56.103なので確認します
Listing usersと表示されていたらOKです。