DockerでRailsチュートリアル(Toyアプリ編1)

公開日:2018-11-17
最終更新:2018-12-19
※この記事は外部サイト(https://rikka-rt.hatenablog.jp/entry/2018/...)からのクロス投稿です

前回の続きからです。さっそく2章に進みましょう。

チュートリアルではHelloWorld編の最後にGitHub/BitbucketへのpushとHerokuへのデプロイをやっていますが、
本記事では(今後も)省略しますので、実施したい人は個々で対応をお願いします。
後々になって記事にした方が良さそうなら別記しようと思います。

Toyアプリ環境準備

まずは環境構築です。HelloWorld編の時と同じで rails new で作っていきます。
Dockerに入り、ホストと共有しているフォルダでコマンドを入れていきましょう。
(Dockerへの入り方は前回と同じなので、省略します)

# cd /var/www  
# rails _5.1.6_ new toy_app  

ホスト側で共有されていることを確認。

次にGemfileを修正します。
HelloWorld編で掲載したGemfileとの差異は、最後の方にproduction環境用のpg(PostgreSQL)が追加されている部分だけです。
なお、HelloWorld編でHerokuの設定まで行っている場合は、(Gemfileの状態が同じになるため)前回のファイルから抜粋してくるのもOKです。

source 'https://rubygems.org'  

git_source(:github) do |repo_name|  
  repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")  
  "https://github.com/#{repo_name}.git"  
end  

gem 'rails', '5.1.6'  
gem 'puma', '3.9.1'  
gem 'sass-rails', '5.0.6'  
gem 'uglifier', '3.2.0'  

gem 'coffee-rails', '4.2.2'  
gem 'jquery-rails', '4.3.1'  
gem 'turbolinks', '5.0.1'  
gem 'jbuilder', '2.7.0'  

group :development, :test do  
  gem 'sqlite3', '1.3.13'  
  gem 'byebug', '9.0.6', platform: :mri  
  gem 'capybara', '~> 2.13'  
  gem 'selenium-webdriver'  
end  

group :development do  
  gem 'web-console', '3.5.1'  
  gem 'listen', '3.1.5'  
  gem 'spring', '2.0.2'  
  gem 'spring-watcher-listen', '2.0.1'  
end  

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

gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]  

保存したら bundle install しますが、PostgreSQLのgemは本番用なので、オプションをつけて除外します。

# cd /var/www/toy_app  
# bundle install --without production  

続けて、ControllerとRouteを設定します。設定内容はHelloWorld編と同じなので復習のつもりで変更していきます。
toy_app\app\controllers\application_controller.rb は以下のように。

class ApplicationController < ActionController::Base  
  protect_from_forgery with: :exception  

  def hello  
    render html: "hello, world!"  
  end  
end  

toy_app\config\routes.rb は以下のように。

Rails.application.routes.draw do  
  root 'application#hello'  
end  

チュートリアルでは、ここまでの修正分をGitHub/Bitbucketにpushし、Herokuにデプロイしますが、最初に記載した通り省略します。

続いて、モデルの作成に進みます。

Userモデル作成

とりあえず、書いてある通りに進めていきます。
bundle install 後なので、toy_app にいるままでコマンドを入れていきます……が。

# rails generate scaffold User name:string email:string  
Could not find pg-0.20.0 in any of the sources  
Run `bundle install` to install missing gems.  

エラーが出ました。
特にエラーが出なかった方は、そのまま進めてください。


エラー対応 ここから

pgのgemが見つからない? みたいな感じですね。
PostgreSQLのgemはproduction用になっているはずなのに、なぜこうなるのか……。

で、新規にコンテナを立てて色々と試して見ましたが、根本原因がよくわかりませんでした。
仕方がないので、pgをproduction以外でも使用するように、Gemfileを変更して進めることにしました。
(原因に心当たりがある方は、教えていただけると助かります)

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

Gemfileを修正後、bundle install してから先ほどエラーになったgenerateコマンドを実行します。

# bundle install --without production  
# rails generate scaffold User name:string email:string  

エラー対応 ここまで


scaffoldという機能?で、toy_app\db\migrate にファイルができました。

続いて、dbのマイグレーション。

# rails db:migrate  

ここまで実行すると、ローカルサーバーが起動できるようなので、確認します。

# rails server  

http://localhost:8080/users にアクセスしてみました。
(以降、ホストとコンテナを繋ぐポートを8080として記載しますので、各自の環境に合わせて変更してください)

(チュートリアルと微妙に違いがありますが)無事に表示されていますね。
続いて、New User のリンクから http://localhost:8080/users/new にアクセスします。
アクセスしたら登録するテストユーザーの情報を入力しましょう。

入力したら Create User ボタンを押下。

以降、チュートリアルに従って「ユーザ情報の変更」「2人目のユーザー追加」「追加したユーザーの削除」を
実施して、動作を確認します。

今回はここまでです。

記事が少しでもいいなと思ったらクラップを送ってみよう!
54
+1
アイマスP兼エンジニアの雑記。

よく一緒に読まれている記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる

技術ブログをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

技術ブログを開設する

Qrunchでアウトプットをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

Markdownで書ける

ログ機能でアウトプットを加速

デザインのカスタマイズが可能

技術ブログ開設

ここから先はアカウント(ブログ)開設が必要です

英数字4文字以上
.qrunch.io
英数字6文字以上
ログインする