Ruby on Railsでscaffoldするまでおさらい

Railsはインストール済みの状態からRailsをいちから復習してみました

Railsは
– DRY
– COC
– REST
– MVC
な設計になっています

  • dry

don’t repeat yourself
同じことを繰り返さない

  • coc

convension over configuration 設定より規約
規約をしばって効率化する設計

  • rest

すべてのリソースに一意となる識別子がある、とかいう考えかたです
URIに対してHTTPメソッドでアクセスし処理をします

  • mvcアーキテクチャー

Model View Controller
で処理を分ける

$ rails new app

appディレクトリにrailsが入ります

javascript runtimeがないときは
therubyracer gemを入れるといいです

私はnode.jsを入れていました

(参考)
centosにnode.jsとnpmをインストールする | bgbgbg
ubuntuにnode.jsとnpmをインストールする | bgbgbg

$ rails server (省略で rails s )
でサーバーが立ち上がる
rails 4.2では rails s -b 0.0.0.0としないとlocalhost以外からアクセスできません

サーバーを止めるには ctrl + c で止めます

$ rails g scaffold Use name:string score:integer
でUserモデルに string型のnameとinteger型のscoreを持ったアプリができる

$ rake db:migrate
でデータベースへmigrationファイルを適用する(テーブルとか作る)

これで
http://localhost:3000/users/
にアクセスすれば

rails-scaffold
rails-scaffold2
rails-scaffold3

といったアプリができあがります

素のRailsでコントローラーのデバッグをする

デバッグ用のGemとかいれず、Railsだけをいれているときコントローラーのデバッグをするなら

logger.debug (ログに出したいもの)
とすれば、logsディレクトリにログがでます

logger.debug params

とかです

development環境なら

logs/development.log

へログが出力されます

Railsのデータベースをsqlite3からpostgresqlに変更する

Railsのデータベースをsqlite3からpostgresqlに変更してみました
postgresqlはインストールして、Rails用のユーザーを作っておきます

Gemfileを変更します

-gem ‘sqlite3’
+gem ‘pg’

sqlite3の代わりにpgに変更

データベース設定ファイルを修正

config/database.yml

default: &default
  adapter: postgresql
  encoding: utf8
  reconnect: false
  pool: 5
  username: root
  password: root
  host: localhost

development:
  <<: *default
  database: sample_dev

test:
  <<: *default
  database: sample_test

production:
  <<: *default
  database: sample

というふうにpostgresql用に変更

データベース作成

$ rake db:create
$ rake db:migrate

でできあがり

gem pgインストール時にエラー

vagrant上のUbuntuでails + postgresqlをインストールしました

事前にpostgresqlをインストール

$ sudo apt-get install postgresql postgresql-contrib

Gemfileに

pg

を追記して

$ bundle install

エラー発生

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    /home/vagrant/.rbenv/versions/2.2.0/bin/ruby -r ./siteconf20150331-4671-5j34dh.rb extconf.rb 
checking for pg_config... yes
Using config values from /usr/bin/pg_config
You need to install postgresql-server-dev-X.Y for building a server-side extension or libpq-dev for building a client-side application.
You need to install postgresql-server-dev-X.Y for building a server-side extension or libpq-dev for building a client-side application.
checking for libpq-fe.h... no
Can't find the 'libpq-fe.h header
*** 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.

Provided configuration options:
        --with-opt-dir
        --without-opt-dir
        --with-opt-include
        --without-opt-include=${opt-dir}/include
        --with-opt-lib
        --without-opt-lib=${opt-dir}/lib
        --with-make-prog
        --without-make-prog
        --srcdir=.
        --curdir
        --ruby=/home/vagrant/.rbenv/versions/2.2.0/bin/$(RUBY_BASE_NAME)
        --with-pg
        --without-pg
        --enable-windows-cross
        --disable-windows-cross
        --with-pg-config
        --without-pg-config
        --with-pg_config
        --without-pg_config
        --with-pg-dir
        --without-pg-dir
        --with-pg-include
        --without-pg-include=${pg-dir}/include
        --with-pg-lib
        --without-pg-lib=${pg-dir}/lib

extconf failed, exit code 1

Gem files will remain installed in /home/vagrant/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/pg-0.18.1 for inspection.
Results logged to /home/vagrant/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/extensions/x86-linux/2.2.0-static/pg-0.18.1/gem_make.out
Installing html2slim 0.2.0
Installing unf 0.1.4
An error occurred while installing pg (0.18.1), and Bundler cannot continue.
Make sure that `gem install pg -v '0.18.1'` succeeds before bundling.

libpq-devが足りなかったみたい

$ sudo apt-get install libpq-dev

で、再度実行でうまくいきました