前回の続きからです。さっそく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人目のユーザー追加」「追加したユーザーの削除」を
実施して、動作を確認します。
今回はここまでです。
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
0件のコメント