0から4までの復習 | rails チュートリアル 5

これまで復習をします。

準備

同じことを繰り返すので、DBも削除しておく。

削除のためのmysqlのコマンドは、mySQL コマンド まとめに書いています。

環境構築

# 適当な位置にcd コマンドで移動しておく

# Gemfileを作成する。
$ bundle init

作成されたGemfileを修正する

# frozen_string_literal: true
source "https://rubygems.org"

gem "rails"

railsなどをインストールする

$ bundle install --path vendor/bundle

# RailsのDBを初めからMySQLに指定してアプリを作成
$ bundle exec rails new . -d mysql

データベースを作成する

/config/database.ymlの「username」と「password」を修正する

  username:'ユーザー名'
  password:'パスワード'

その後、

$ bundle exec rails db:create
Created database 'アプリ名_development'
Created database 'アプリ名_test'

# サーバーを立ち上げる
$ bundle exec rails s

http://localhost:3000/を見てみる。

「Yay! You’re on Rails!」
と表示されていたら、ここまでは順調!

サイトトップページのhtmlを用意してみる

サイトトップページのために、ルーティングを修正します。

$ bundle exec rails generate controller top index
Running via Spring preloader in process 62738
      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

routes.rbを確認すると、

Rails.application.routes.draw do
  get 'top/index'
end

これを

Rails.application.routes.draw do
  root 'top#index'
end

というように、修正しておく。

http://localhost:3000/を見てみると、ページが変わっているのがわかるはず。

scaffoldコマンドをためす。

チュートリアルで出てきたscaffoldコマンドを試します。

$ bundle exec rails generate scaffold User name:string email:string
$ bundle exec rails generate scaffold Micropost content:text user_id:integer
$ bundle exec rails db:migrate

modelを修正する

user.rb

class User < ApplicationRecord
  # micropostと紐付ける
  has_many :microposts
  # 未入力を受け付けなくする
  validates :name, presence: true
  validates :email, presence: true
end

micropost.rb

class Micropost < ApplicationRecord
  # userと紐付ける
  belongs_to :user
  # 未入力や、141文字以上を受け付けなくする。
  validates :content, length: { maximum: 140 }, presence: true
end

その後、scaffoldコマンドで作成されてページが正常に動いているかを確認することができる

http://localhost:3000/users
http://localhost:3000/microposts

herokuにデプロイ

Gemfileに下記を追記していく

group :development, :test do
  gem 'sqlite3', '1.3.13'
end

group :production do
  gem 'pg', '0.20.0'
end

gem 'pry-rails'

インストールする

$ bundle install --path vendor/bundle --without production

herokuにログインをして、heroku内に環境を作成する。

$ heroku create 'アプリ名'
Creating ⬢ 'アプリ名'... done
https://'アプリ名'.herokuapp.com/ | https://git.heroku.com/'アプリ名'.git

# git にコミットしておく
$ git add .
$ git c -m "初期コミット"

# herokuにpushする
$ git push heroku master

# 少し時間がかかります。

このままでは静的なページしか見れないので、migrateを行う。

# herokuをmigrate
$ heroku run rails db:migrate

herokuを確認する

$ heroku open

ページがちゃんと見れるようになっているのを確認できたら、復習はひとまず出来たことにする。

ルーティングを確認する

http://localhost:3000/rails/info/routesにアクセスする

エラーがでたら

bundle exec rails s が動かない

macの再起動後に、Mysql2::Errorというエラーがでたら、mysqlが起動しているか確認する。

エラーのコメント

Mysql2::Error (Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)):

修正方法

$ mysql.server start

開発用にinstallしたpry-railsをinstallしたのに、consoleがpryで起動しない

railsアプリを作成し直したり、gemfileをインストールしなおしたりしてみても、動かない状態が続きました。

しかし、別のディレクトリで作成したrailsアプリでは、「[1] pry(main)>」というように、期待したとおりに動いた。

いくつかやっている間に、bundle rails c自体もうまく動かなくなった。

そのときのエラーは、だいたい、こんな感じ

The gemspec for rb-fsevent-0.10.1 rb-fsevent-0.10.1.gemspec was missing or broken.
Try running `gem pristine rb-fsevent -v 0.10.1` to fix the cached spec. (Bundler::GemspecError)

gem pristine rb-fseventやら、rbenv rehashをやってみても、結果は変わらず。。

macを再起動したら、何事もなかったかのように、意図した動きをするようになりました。。。orz

なんだったんだ、いったい。

また、この問題が出てきたら、まともな解決策を考えたい。。

コメント

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

内容に問題なければ、下記の「コメントを送信する」ボタンを押してください。

同じカテゴリの前後の記事


  1. KATOON.NET
  2. TRASH
  3. 0から4までの復習 | rails チュートリアル 5