Web Marina

日々の業務や勉強などで得た知識をアウトプットしていきます。

今更ながらRailsをアップデートしました。

Tutorial7章終わりまで来て今更Rails5にアップデードしたお話です。

みなさん明けましておめでとうございます。

年末に「はじめました」記事を書きましたが、この度Rails Tutorialの第7章が終了したので本格的に始めることにしました。

記念すべき(実質)最初の記事は、これまでRails TutorialをRails4.2で学習していたところ、第7章「プロのデプロイ」でPumaを導入するにあたりRailsを5.0.1にアップデートしたお話です。

と言ってもさっさと勉強進めたかったのでだいぶ強引にアップデートしたので実践的ではないと思いがよろしくお願いします。

バージョンアップの仕方

まずは当然作成中のディレクトリのままのバージョンアップを試みました。がしかし、そもそもPCにRails5はもちろんRuby2.2.2も入っていなかったです・・・

ということでそれらをインストールし、スマートなやり方ではないと思いましたが、rails5用のディレクトリを作成してこれまでのファイルをそこにコピーすることにしました。

(元を変えて失敗したら怖かったので・・・)

それぞれのインストールにはこちらを参考にさせて頂きました。

http://qiita.com/gaku3601/items/5a484043f9c803ce9941

変更点

アプリのコードは変更というよりほとんど教材通りに直しただけです。 (Rails5前提で書かれてるのだから当たり前ですけど…)

<変えた部分>

  1. Gemfile.lock。ここは丸ごと消してやり直しました。
  2. Gemfile。ここもチュートリアルのやつを丸ごとコピペしました。 (ちなみに7章までの最終版のGemfileは、この章のリスト6.36が最後です。 https://railstutorial.jp/chapters/modeling_users?version=5.0#cha-modeling_users)
  3. 前に自分で勝手に消したparamsを教材通りに戻す。
  4. ActiveRecord::Baseを継承している部分をApplicationRecordにする。
  5. テストでDEPRECTION WARNINGが3つほど出たので警告に従い対処。

詳細

1. Gemfile.lock

Rails5導入に伴い、インストールしているgemもアプデートしなくてはならないのですが、こいつがあるとうまくいきません。 なので一度削除することにしました。

2. Gemfile

最新版とかは今のところ必要ないので、これはチュートリアルのものを丸々コピペしてbundle install。 これでGemfile.lockも新しく作り直されました。

3. 自分で消したparams

これは以前Rails4.2の時にparamsハッシュを使おうとしたところ、params:{ }を省略しないと正常に動作しなかったため削除したのですが、Rails5からは明示的に記述するのが推奨されているとのことでしたので戻しました。

ちなみに削除した経緯の詳細はこちらです。

http://qiita.com/maru_katy/items/76eebf872c3d927abbd8

4. ApplicationRecord

Rails4.2以前はActiveRecord::Baseから継承されていたものが、Rails5からはApplicationRecordに移されたとのことです。

<手順>

  1. app/modelsにapplication_record.rbファイルを作成。 次を記述
class ApplicationRecord < ActiveRecord::Base
self.abstract_class = true
end
  1. ソース内のActiveRecord::Baseの部分をApplicationRecordに修正。 これはこちらを参考にさせていただきました。 https://railsguides.jp/upgrading_ruby_on_rails.html http://qiita.com/ryohashimoto/items/09724ad4dddcda01bce3

5. テストで出るDEPRECTION WARNING

具体的にはconfig/environments/test.rbファイルで2つ。 config.serve_static_files -> config.public_file_server.enabled = true config.static_cache_control = ‘public, max-age=3600’ ->config.public_file_server.headers = { ‘Cache-Control’ => ‘public, max-age=3600’ }

もう一つはアプリのソース外です。 これは4.2からだそうですが、隠しディレクトリの.rbenv以下のファイルにある raise_in_transactional_callbacks=(value) の設定をtrueにしました。

これらの詳しい説明はRailsのアップグレードガイドをご覧ください。

https://railsguides.jp/upgrading_ruby_on_rails.html

まとめ

まず、Markdownの書き方や文章に慣れてなくてすみません。 もう少し読みやすい文章や書き方も勉強します。

今回のやり方は正攻法ではないとは思いますが、自ら調べて何とかうまくいったことは無駄ではなかったと信じています 笑

これからどんどん勉強や情報収集をして、どこかでどなたかのお力になれる記事が書けるように精進してまいりますので、どうぞよろしくお願いいたします。

最後に、3日坊主にならないことを祈ります・・・ 笑