Ruby
Rails
Heroku

Ruby on Rails Tutorial学習メモ(1)

More than 1 year has passed since last update.

日本語訳版(v4.2)で学習。
ただバージョンアップに対応出来ていないので細かな部分は英語版ですすめた。その際にバージョンまわりの障害に当たったので誰かのたすけになればとメモを残しておきます。

環境構築

Cloud9のワークスペース作成

ここは特に問題なくGUIでサクサク作成できる
- アプリ名:rails_tutorial
- 公開設定:private
- テンプレート: rails tutorial

RailsとパッケージマネージャBundlerの設定

ここで日本版と原版でバージョンが異なる。
おそらくここの差でのちのデプロイ時に引っかかるので英語版ですすめる

$ gem install rails -v 5.1.2 #ここが日本版より新しい
# 日本版ではRuby自体やBundlerなども入れているがそこはスキップ
$ cd                  # Change to the home directory.
$ mkdir workspace     # Make a workspace directory.
$ cd workspace/       # Change into the workspace directory.

アプリの作成

$ cd ~/workspace
$ rails _5.1.2_ new hello_app

バージョン指定しているのでここも英語版にあわせる

Gemfileの編集

ここも英語版のバージョンにあわせる

source 'https://rubygems.org'

gem 'rails',        '5.1.2'
gem 'sqlite3',      '1.3.13'
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 'byebug', '9.0.6', platform: :mri
end

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

# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

Gemfileができたらbundlerにおぜん立てをお願いする。
updateはたぶん必要になる。updateするとinstall必要ないようだけど一応やる。

$ cd hello_app/
# 英語版にはないがupdateが必要な旨の警告がでた
$ bundle update
$ bundle install

確認

$ cd ~/workspace/hello_app/
$ rails server -b $IP -p $PORT

をやってプレビューボタンからraw previewしてあげるとRailsインストール済み画面がでる。やったぜ。

rails.png

Hello, World!アプリの作成

このあたりは日本版でも何の問題もなさそう。

Git Bucket連携

ここでひっかかったのはSSH鍵の登録をおこなうところ。
アプリごとにも設定が可能だが、そっちに登録してしまうとReadOnlyなためpushすることができない。個人アカウントのページから登録する
↓2017/11現在こんな画面のほう。
スケッチ.png

Herokuデプロイ

どちらのチュートリアルもすらっといくけど日本版ですすめていた時には以下のような障害が立ちふさがった。

Herokuへのpushに失敗する

$:~/workspace/hello_app (master) $ git push heroku master:master
remote:  !     No default language could be detected for this app.
remote:                         HINT: This occurs when Heroku cannot detect the buildpack to use for this application automatically.
remote:                         See https://devcenter.heroku.com/articles/buildpacks
remote: 
remote:  !     Push failed
remote: Verifying deploy...

なるほどbuildpack:setが必要なのか。そしてerrorにでているurlによるとbuildpacks:setとやらでsetするらしい。

$:~/workspace/hello_app (master) $ heroku buildpacks:set heroku/ruby

Buildpack set. Next release on limitless-sea-25260 will use heroku/ruby.
Run git push heroku master to create a new release using this buildpack.

互換性がない...?
なにかちがうバージョンなのかと調べてみたところ
https://teratail.com/questions/14604
に似たようなことが書いてあったので違うbuildpacksにしてみる。

$ heroku buildpacks:set https://github.com/heroku/heroku-buildpack-ruby

自分の場合はこれでもだめ。。。

ちなみに自分の場合はあきらめて英語版にしたがって最初からすすめ直したところ問題なくデプロイできるようになった。その時点での日本版との差異としては

  • railsのバージョンが異なる
  • railsのバージョンが異なることでGemfileも異なる
  • 日本版ではRuby自体やbundlerのバージョンをマニュアルで指定している

bundlepacksは本来ならheroku createの時点で作ってくれるようなので、herokuコマンドのバージョンを変えうるあたりが怪しいが、このあたりは調べても情報が陳腐化しそうなのでスルーして先に進む

参考

Rails Tutorial: https://www.railstutorial.org/book/beginning
Rails Tutorial日本語訳版:https://railstutorial.jp/chapters/beginning