kansiho's memo

ruby, python, javascript. Rails, wordpress, OpenCV, heroku...

rubyのバージョンを2.4.0に上げてRails 5を導入【自分用メモ】

f:id:serendipity4u:20170417172047p:plain

ruby はバージョンを上げるほど高速になりますし、ruby 最新版を使うためにはrailsアップグレードも必要です。

rubyバージョンを上げる

Rails 5にはRuby 2.2.2以上が必要。

Gemfileに ruby ‘2.4.0’ .ruby-versionファイルも書き換え。

rails gemのバージョンを指定。

gem 'rails', '5.0.0'

rails gem をアップデート。

 bundle update rails

rails の設定ファイルの更新

bin/rails app:update

大半は上書きしても問題無いが、 routes.rbやenvironments/以下のファイルが全部書き直されたりするので注意。

ApplicationRecordクラス

app/models/application_record.rbを以下の内容で作成。

class ApplicationRecord < ActiveRecord::Base
  self.abstract_class = true #書いとけば継承ベース用のモデルだと認識してくれる。
end

さらに、ActiveRecord::BaseをすべてApplicationRecordに書き換える。

class Sample < ApplicationRecord

vimmerなら

:argdo %s/ActiveRecord::Base/ApplicationRecord/g | update

で複数ファイルの一発置換が可能。

key must be 32 bytes というエラーが出たら

Railsのバージョンを5.0.0.1→5.0.1に変更してbundle updateすれば治ります。

Hmm, after some digging in some C code (💀), looks like there is a new breaking change in OpenSSL, which rejects certain values for key=, which is the bug you are running into. :(

とのこと。

qiita.com

Instagram gemのエラーが起きたら

git レポジトリを指定しましょう。

gem 'instagram', :git => 'git://github.com/Instagram/instagram-ruby-gem.git'   

DEPRECATION WARNING: alias_method_chain is deprecated がたくさん出たら

config/application.rb に追記してRails5に対応前のgemの存在により出て来るこの警告の表示をオフにする。

ActiveSupport::Deprecation.silenced = true

参考

qiita.com

zx.jpn.org

qiita.com

Runtime error in controller: Circular dependency detected while autoloading constant が発生したら

app/models/application_record.rbを以下の内容で作成。

class ApplicationRecord < ActiveRecord::Base
  self.abstract_class = true #書いとけば継承ベース用のモデルだと認識してくれる。
end

bin/rails app:updateによって上書きされていないか調べる。

ちゃんとActiveRecord::Baseを継承しているかチェック。