Mercurial > hg > Members > innparusu > slides
view 2017/2017_10_10/slide.md @ 28:382cd93f2a60
Update slide
author | Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 31 Oct 2017 18:16:16 +0900 |
parents | |
children |
line wrap: on
line source
title: Akatsuki の Rails 5.1 へのUpdate author: いんぱるす@きりん profile: lang: Japanese code-engine: coderay ## 目的 現状のAkatsukiはRails 4.2.6 で運用されている。 しかし、今年の4月にRails 5.1がリリースされ、Rails 4系は重要なセキュリティfix 以外はサポートされなくなった。 そのため、現状の最新版5.1.4 にUpdateすることを目的とする(ついでに秋のLT大会があったので発表する) ## 今週 - Rails 4.2.6 -> 5.1.4 - Rails 5.1 がリリースされたときに, Rails 4 はほぼサポートされなくなってしまった - 内定式の動画づくり、編集 (次話し振られて,強制されたらこの会社辞めますって人事に言いました) ## 基本的には - 4.2.6 -> 5.0.6 -> 5.1.4 - ``$ ./bin/rails app:update`` でいい感じに merge してあげる - あとは, [Railsアップグレードガイド](http://guides.rubyonrails.org/upgrading_ruby_on_rails.html) に従う ## ハマったとこ - rspec でテストを一気に走らせると事故るケースがある - 失敗した所に binding.pry をかけると, ActiveLdap(学科アカウントとの連携で使われるもの) で association先がうまく取れない場合がある ``` ruby class LDAP::User < ActiveLdap::Base .... #ここがうまく取れない場合がある belongs_to :groups, class_name: 'LDAP::Group', many: :memberUid ... end ``` ## 原因 - LDAP::User が取れるはずの場所で LDAP::User を継承した class が 取れるときがあった - 継承先ではassociationの記述がないため, association 先のclassが取れないのが原因っぽいのがわかった - 新しい ActiveLdap の version では ActiveRecord の STI(single table inheritance) っぽいことをサポートしていた - Akatsuki では継承先で取れても問題はなかったので, 継承先に association を書くことで対応 ``` ruby pry(main)> (LDAP::User.find ("akatsuki")).class => API::LDAP::Felica(objectClass:<top, person, po..... # <= LDAP::User がとれるはずなのに、、、 ``` ## 結果 - 紆余曲折あったが無事 local 環境での Update はできました - まだ本番環境に上げてない(いつか News-ie でメンテナンス情報が以下略) ## LT - 先週の土曜の 秋のLT で発表(さっきの話+Akatsukiの軽い説明) - 目的はAkatsukiの運用の継承者探し ## 直近の障害対応 - LDAP User のパスワード validation を付けた際にバグがあったらしく, loginShell を変えるとPasswordが変わる(恐ろしい - 今さっき対応しました、、、 - 理由は password の validation を付けるためにmd5への暗号化を validtion 後にやっていたのが原因 - Passwordを変更して無くても暗号化が走る様になっていた(既に暗号化されたものをさらに暗号化して保存) - password が変更されたときのみにvalidation後の暗号化をすることで対応 ``` ruby after_validation do if userPassword_changed? self.userPassword = ActiveLdap::UserPassword.md5(self.userPassword) self.userPassword_confirmation = ActiveLdap::UserPassword.md5(self.userPassword_confirmation) end end ```