rails を4.1.6から4.2.1にしたら、awsが動かなくなって、deliverメソッドを注意された

rubyのバージョンもあげようと思ったけど、

$ rbenv install --list

で見たら、2.2.0-preview1が最新だったので、安定版が出るまで待つことにする。

 

railsのバージョンをあげよう

  1. まずテストが通るか試す。アップデート後のエラー修正で、原因の特定がしやすくなる。
  2. Gemfileのrailsバージョンをあげる。今回は4.1.6から4.2.1に。f:id:bambinya:20150321104349p:plain
  3. $ bundle update する

    f:id:bambinya:20150321110025p:plain

  4. $ rake rails:update する。設定ファイルに変更が加えられていく。コンフリクトすると、上書きするか無視するか聞かれる。コマンドは[Ynaqdh]から選べる。それぞれ[Y:yes,overwrite!like the BOSS!! n:no. a:overwrite all files q:quit,abort d:show diff h:help]という意味。(時間がないときは、いったん全部上書きして、git diffで確認すると良い。) 今回はdiffを見て、2つのファイルはスキップした。

    config/routes.rb

    config/environments/production.rb

    f:id:bambinya:20150321110831p:plain

  5. 今回、変更があったファイル。

    f:id:bambinya:20150321111956p:plain

  6. git diffを見ながら、一通り修正をする。ここが一番勉強。

    公式サイトに 2 Upgrading from Rails 4.1 to Rails 4.2 がある。

    A Guide for Upgrading Ruby on Rails — Ruby on Rails Guides

  7. 一通り修正が終わったら、$ be rspecしてみる。AWSがないって言われた。

    f:id:bambinya:20150321152450p:plain

    調べたら、AWSのバージョン2以上は違うモジュール名を使っているので、AWSというnamespaceが見つけられないと。詳細はAWSブログにもありました。

    Upcoming Stable Release of AWS SDK for Ruby - Version 2 - AWS Developer Blog - Ruby

    gem 'aws-sdk', '< 2.0'

    gemfileで、上記のように古いバージョンにしたら、AWSがないとは言われなくなった。gemを追加して、バージョン1とバージョン2の両方のモジュールを、一つのアプリケーション内で使うこともできるらしい。でも、あんまり美しくないから古い方を選んだ。

  8. $ be rspecしてみる。deliverメソッドはdeliver_nowに変えろってたくさん言われた。models/user.rbで使っていた.deliverを.deliver_nowに変更する。

    f:id:bambinya:20150321152710p:plain

  9. テストが通った。f:id:bambinya:20150321154628p:plain