asumi.chを公開してもう1年以上たちましたね.
そろそろ時期なのかなーということで,Railsのバージョンアップをしました.
というわけでメモを残しておきます.
とりあえずアップデートをかけてエラーを起こしてから対処
機能としてはすべて把握しているので,どこをチェックすればいいかはだいたいわかっています.
というわけで,とりあえずアップデートをかけてしまいましょう.
まずは,rubyのバージョンをあげます.
以前は1.9.3を使っていたのですが,これももうサポート対象外になってしまうので,2.2.0まで上げました.
rbenvを使っているので,このへんはいつもどおり…….
と思いきやエラーが出ます.
/usr/bin/ld: ./libffi-3.2.1/.libs/libffi.a(raw_api.o): relocation R_X86_64_32 against `.text' can not be used when making a shared object; recompile with -fPIC ./libffi-3.2.1/.libs/libffi.a: could not read symbols: Bad value collect2: ld returned 1 exit status
これはどうやらlibffi-dev
を入れれば問題ないらしい.
$ sudo apt-get install libffi-dev
そしてGemfileを修正します.
gem 'rails', '4.2.0' gem 'sass-rails' gem 'coffee-rails'
rails以外にも関連してバージョン指定してあったもののバージョン指定を外します.
$ bundle update $ bundle exec rake rails:update
こうしてrailsのアップデートをかけると,config/以下のファイルが上書きされていきます.
対話形式で聞かれるので適当に答えていきましょう.
なんか残さなきゃいけない設定とかは,後から編集するなりとっておくなりしてください.
以下,修正が必要になった点
- routes.rb内のmatchを排除
- development.rb,production.rb内のegger_load設定
mass-assignmentの対応
Rails3.2時代にはattr_accessibleが多用されていました.
フォームなんかで,パラメータを渡すとそのままモデルのcreate,updateをしてくれるようなコードを書く際,アクセスを許可する属性を書いていたんですね.
これがRails4.0から廃止になりました.
attr_accessibleが記述されているモデルはすべてエラーになるので(attr_accessibleが定義されていない),すべて削除します.
代わりに,モデルにpostしているコントローラでstrong_parametersを使うように変更します.
Rails4.0に含まれる strong_parameters について - willnet.in
debuggerの変更
ruby1.9系ではdebuggerというgemが大変重宝していました.
ただし,ruby2.0以降ではdebuggerは使えなくなっています.
そのため,新しいデバッガとしてpry-byebugを導入しました.
deivid-rodriguez/pry-byebug · GitHub
asset-pathの記述変更
scssでの画像指定の際などに,asset-pathを指定していたんですが,そこの記述方法が多少変更になっています.
Rails3.2
background: url(asset-path("blur_back04.jpg",image));
Rails4.2
background: image-url("blur_back04.jpg");
twitter gemの記述修正
関連するgemのアップデートもかかっているので,twitter gemが変更になっていたりします.
このへんは公式を見て記述をあわせます.
twitter 4.6.2
Twitter.configure do |config| config.consumer_key = Settings.twitter.consumer_key config.consumer_secret = Settings.twitter.consumer_secret config.oauth_token = Settings.twitter.oauth_token config.oauth_token_secret = Settings.twitter.oauth_token_secret end
twitter 5.13.0
@client = Twitter::REST::Client.new do |config| config.consumer_key = Settings.twitter.consumer_key config.consumer_secret = Settings.twitter.consumer_secret config.access_token = Settings.twitter.oauth_token config.access_token_secret = Settings.twitter.oauth_token_secret end
rails serverのデフォルトホスト変更
本番には一切影響しませんが,developmentで開発している際に,rails serverを起動すると,デフォルトホストが書き換わっています.
Ruby on Rails 4.2 リリースノート — Rails ガイド
今までは0.0.0.0:3000
だったものが,localhost:3000
に書き換わっています.
vagrantなどで実行している際に,ブラウザで192.168.33.10:3000
とか打ってもアクセスできません.
$ rails s -b 0.0.0.0 => Booting WEBrick => Rails 4.2.0 application starting in development on http://0.0.0.0:3000 => Run `rails server -h` for more startup options => Ctrl-C to shutdown server [2015-02-08 15:29:18] INFO WEBrick 1.3.1 [2015-02-08 15:29:18] INFO ruby 2.2.0 (2014-12-25) [x86_64-linux] [2015-02-08 15:29:18] INFO WEBrick::HTTPServer#start: pid=3546 port=3000
と起動してやることで,今まで通りにアクセスできます.
ページキャッシュ
Rails4.0からpage cache,action cacheは廃止になりました.
表示部分のキャッシュについては,fragment cache(Russian Doll Caching)を使います.
Rils4で Russian Doll Caching を楽しむためのまとめ [俺の備忘録]
オブジェクトのキャッシュについてはRails.cache.fetchで対応できます.
http://easyramble.com/rails-cache-fetch.html
page cacheやaction cacheを使いたい場合は,gemで別途入れます.
rails/actionpack-page_caching · GitHub
rails/actionpack-action_caching · GitHub