- 公開日:2017年03月20日
- 最終更新日:2017年05月05日
記事概要
rails5.0.1からRails5.1.0beta1にアップグレードした時の方法をまとめた記事です。
環境
- centos6.5
- Rails5.0.1 → Rails5.1.0beta1
- ruby2.3.0 → ruby2.4.0
- rbenv
- unicorn
- whenever
はじめに
Rails5.1.0beta1がリリースされたので、Rails5.1.0の準備を開始しました。
今回は変更点が多いので、Rails5.1.0beta1の状態ではリリースせず、Rails5.1.0になってからリリースをしたいと思います。
また、この機会に色々とRailsアプリのリファクタリングをしていこうと思っています。
ずっとAndroid開発で放置状態だったので。出し惜しみしないで、ブログに情報も載せていこうと思います。
Rails5.1.0の変更点
Rails5.1.0は、Rails5.0.1と比較すると大きく変わりました。変更点の概要を以下に記述します。
- YarnでjavaScriptを管理
- webpackでビルドが可能
- jQueryが不要になった(rails-ujsに書き直された)
- 機能テスト用のライブラリCapybaraが正式にサポート
- 暗号の管理方法変更
- routesの改良
- form_withでform_tag / form_forを統一
- 4.x以前はサポートしない
凄まじい量の変化です。なので、今から少しづつ対応していきましょう。
作業内容
今回のRails5.1.0のアップグレードでは、以下のタスクを行っていく予定です。
- jQueryをrails-ujsに置き換える
- Capybaraの導入
- CIの設定
- 暗号の管理方法変更
- routesの改善
- form_withでform_tag / form_forを統一
- Ruby2.4のコードにリファクタリング
最低限でこれくらいありますね。Ruby2.4のFixnumの改善も対応したっぽいので、コードも本格的に修正します。頭痛くなってきた。。。
移行用の作業branchの作成
gitでrails5.1.0beta1移行用の作業ブランチを作成します。
cd {project_folder} git branch feature/rails5.1.0beta1
checkoutでブランチを切り替えます。
git checkout feature/rails5.1.0beta1
準備完了です。
Gemfile修正
まずGemfileを修正します。
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails' gem 'rails', '5.0.1' ↓ # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' gem 'rails', '5.1.0.beta1'
gem 'rails', '5.1.0.beta1'に修正し、updateします。
// update bundle update
bundle updateは、全ての依存関係をインストール・ダウンロードし直すことができます。
Fetching git://github.com/capistrano/rbenv.git Fetching gem metadata from https://rubygems.org/.............. Fetching version metadata from https://rubygems.org/... Fetching dependency metadata from https://rubygems.org/.. Resolving dependencies................. Using rake 12.0.0 Installing concurrent-ruby 1.0.5 (was 1.0.3) Installing i18n 0.8.1 (was 0.7.0) Using minitest 5.10.1 Installing thread_safe 0.3.6 (was 0.3.5) Installing builder 3.2.3 (was 3.2.2) Installing erubi 1.6.0 Using mini_portile2 2.1.0 Using rack 2.0.1 Installing nio4r 2.0.0 (was 1.2.1) with native extensions Using websocket-extensions 0.1.2 Using mime-types-data 3.2016.0521 Installing arel 8.0.0 (was 7.1.4) Installing net-ssh 4.1.0 (was 3.2.0) Using ast 2.3.0 Using debug_inspector 0.0.2 Using bundler 1.11.2 Installing byebug 9.0.6 (was 9.0.5) with native extensions Installing capistrano-harrow 0.5.3 (was 0.5.2) Using chronic 0.10.2 Installing coffee-script-source 1.12.2 (was 1.10.0) Using execjs 2.7.0 Using method_source 0.8.2 Using thor 0.19.4 Using database_cleaner 1.5.3 Installing diff-lcs 1.3 (was 1.2.5) Using multipart-post 2.0.0 Installing hashie 3.5.5 (was 3.4.4) Using multi_json 1.12.1 Installing json 1.8.6 (was 1.8.3) with native extensions Installing jwt 1.5.6 (was 1.5.4) Installing kaminari-core 1.0.1 Installing kgio 2.11.0 (was 2.10.0) with native extensions Installing libv8 3.16.14.19 (was 3.16.14.15) Installing multi_xml 0.6.0 (was 0.5.5) Installing mysql2 0.4.5 (was 0.4.4) with native extensions Using powerpack 0.1.1 Installing rainbow 2.2.1 (was 2.1.0) with native extensions Installing raindrops 0.17.0 (was 0.16.0) with native extensions Installing rdoc 4.3.0 (was 4.2.2) Using ref 2.0.0 Using rspec-support 3.5.0 Using ruby-progressbar 1.8.1 Installing unicode-display_width 1.1.3 (was 1.1.0) Installing sass 3.4.23 (was 3.4.22) Installing tilt 2.0.7 (was 2.0.5) Using turbolinks-source 5.0.0 Using tzinfo 1.2.2 Installing sitemap_generator 5.3.1 (was 5.1.0) Installing nokogiri 1.7.0.1 (was 1.6.8.1) with native extensions Using rack-test 0.6.3 Using sprockets 3.7.1 Installing websocket-driver 0.6.5 (was 0.6.4) with native extensions Using mime-types 3.1 Using net-scp 1.2.1 Installing parser 2.4.0.0 (was 2.3.1.2) Using binding_of_caller 0.7.2 Using whenever 0.9.7 Using coffee-script 2.4.1 Installing uglifier 3.1.9 (was 3.0.0) Installing faraday 0.11.0 (was 0.9.2) Installing omniauth 1.6.1 (was 1.3.1) Installing unicorn 5.2.0 (was 5.1.0) with native extensions Installing sdoc 0.4.2 (was 0.4.1) Installing therubyracer 0.12.3 (was 0.12.2) with native extensions Installing rspec-core 3.5.4 (was 3.5.1) Using rspec-expectations 3.5.0 Using rspec-mocks 3.5.0 Installing turbolinks 5.0.1 (was 5.0.0) Installing activesupport 5.1.0.beta1 (was 5.0.1) Using loofah 2.0.3 Using mail 2.6.4 Installing sshkit 1.12.0 (was 1.11.1) Installing rubocop 0.47.1 (was 0.41.2) Installing oauth2 1.3.1 (was 1.2.0) Using webpay 3.2.3 Installing rails-dom-testing 2.0.2 (was 2.0.1) Using globalid 0.3.7 Installing activemodel 5.1.0.beta1 (was 5.0.1) Installing factory_girl 4.8.0 (was 4.7.0) Installing jbuilder 2.6.3 (was 2.5.0) Installing spring 2.0.1 (was 1.7.2) Using rails-html-sanitizer 1.0.3 Installing airbrussh 1.1.2 (was 1.0.2) Using omniauth-oauth2 1.4.0 Installing activejob 5.1.0.beta1 (was 5.0.1) Installing activerecord 5.1.0.beta1 (was 5.0.1) Installing actionview 5.1.0.beta1 (was 5.0.1) Using capistrano 3.5.0 Using omniauth-google-oauth2 0.4.1 Installing kaminari-activerecord 1.0.1 Installing actionpack 5.1.0.beta1 (was 5.0.1) Installing kaminari-actionview 1.0.1 Using capistrano-bundler 1.1.4 Installing capistrano-maintenance 1.2.0 (was 1.0.0) Using capistrano-rbenv 2.1.0 (was 2.0.4) from git://github.com/capistrano/rbenv.git (at master@4483faf) Using capistrano-ssh-doctor 1.0.0 Using capistrano3-unicorn 0.2.1 Installing actioncable 5.1.0.beta1 (was 5.0.1) Installing actionmailer 5.1.0.beta1 (was 5.0.1) Installing railties 5.1.0.beta1 (was 5.0.1) Using sprockets-rails 3.2.0 Installing rails-controller-testing 1.0.1 (was 0.1.1) Installing kaminari 1.0.1 (was 0.17.0) Installing capistrano-rails 1.2.3 (was 1.1.7) Using coffee-rails 4.2.1 Installing factory_girl_rails 4.8.0 (was 4.7.0) Installing jquery-rails 4.2.2 (was 4.1.1) Installing rails-i18n 5.0.3 (was 5.0.0) Installing rspec-rails 3.5.2 (was 3.5.1) Using teaspoon 1.1.5 Installing rails 5.1.0.beta1 (was 5.0.1) Using sass-rails 5.0.6 Using web-console 2.3.0 Using teaspoon-jasmine 2.3.4 Bundle updated!
一発でうまくいきました。5.0.1に対応してあれば、bundle updateはひっかからないようです。
すべてのgemの更新に成功したら、updateの準備は完了です。
Upgrade to Rails5.1.0beta1
Gemファイルの導入が完了したら、rails app:updateで設定ファイルを更新します。
bundle exec rails app:update
ファイル更新の有無を聞かれるので、更新が必要なファイルのみ変更します。
私の環境では以下のようにしました。
- config/routes.rb → 更新しない
- config/application.rb → 更新しない
- config/secrets.yml → 更新する
- config/cable.yml → 更新する
- config/puma.yml → 更新する
- config/environments/development.rb → 更新する
- config/environments/production.rb → 更新する
- config/environments/test.rb → 更新する
- config/initializers/assets.rb → 更新する
- config/initializers/new_framework_defaults.rb → 更新しない
- bin/setup → 更新しない
- bin/update → 更新しない
diffで確認したところ、変更点で気をつける点は以下です。
config/environments/development.rb
ActiveSupport::EventedFileUpdateCheckerがデフォルトで有効になっています。
vagrantやdocker等の仮想環境で開発をしている場合は無効にしておいた方が良いです。更新が反映されなくなることがあります。
config.file_watcher = ActiveSupport::EventedFileUpdateChecker # config.file_watcher = ActiveSupport::EventedFileUpdateChecker
config.assets.digest = trueが削除さています。
これも不要みたいです。毎回コンパイルされるのかな。。。
config/environments/production.rb
config.read_encrypted_secrets = trueが追加されました。
暗号は管理方法が変わりました。
Rails5.1.0beta1 Encrypted secretsの対応
下記のやり方だと、Rails5.1.0では動作しませんでした。既存のsecrets.ymlでも動くので、Encrypted secretsの導入は少し待ってからの方が良いかもしれません。これだと管理が煩雑になって、デメリットの方が多い気がします。
暗号の管理方法が変更されたので対応します。terminalを開きます。
bin/rails secrets:setup config/secrets.yml.key append .gitignore create config/secrets.yml.enc You can edit encrypted secrets with `bin/rails secrets:edit`. Add this to your config/environments/production.rb: config.read_encrypted_secrets = true
これだけです。パスワードの入ったsecrets.yml.keyファイルを.gitignoreに自動で追加してくれます。 config/secrets.yml.encはgitで管理可能です。pushしてもOKです。
また、config/environments/production.rbにconfig.read_encrypted_secrets = trueが追加されていることも確認してください。
あとは、本番でconfig/secrets.yml.keyのuploadを忘れないようにしましょう。開発環境で有効にする必要はないとは思いますが、本番と同じにしたい人はconfig.read_encrypted_secrets = trueを追加しても良いと思います。
Rails5.1.0beta1 rails-ujs対応
rails-ujsを導入すれば、jQueryが不要になります。jQueryなしで動くように書き直されたようです。素晴らしい!!
デバッグ中にバグが出ました。jqueryに依存しているところは書き直しが必要です。
# Use jquery as the JavaScript library #gem 'jquery-rails' gem 'rails-ujs'
インストールします。
// update bundle update Installing rails-ujs 0.1.0
インストールしたら、application.jsを修正します。
//= require jquery //= require jquery_ujs //= require turbolinks //= require_tree . ↓ //= require rails-ujs //= require turbolinks //= require_tree .
Rails5.1.0beta1起動
アプリを起動します。
rbenv exec bundle exec rails s -b 0.0.0.0 => Booting WEBrick => Rails 5.1.0.beta1 application starting in development on http://0.0.0.0:3000 => Run `rails server -h` for more startup options [2017-03-20 14:24:05] INFO WEBrick 1.3.1 [2017-03-20 14:24:05] INFO ruby 2.3.0 (2015-12-25) [x86_64-linux] [2017-03-20 14:24:05] INFO WEBrick::HTTPServer#start: pid=10639 port=3000
コンソールにRails 5.1.0.beta1 applicationが表示され、画面が表示されれば成功です。
私の環境では問題なく動いているようです。jqueryがなくなって、rails-ujsになったので、動きが軽くなった気がします。計測はしていませんけどね。
だいたいここまでで3時間くらいです。とはいえ、ここからが本番ですが。
まとめ
Rails5.0.1からRails5.1.0beta1のアップデートは、多くの変更が必要になります。
4.x以下は切り捨てられるので、早めに更新の準備をしましょう。また、Fixnumの改善も対応済み(らしい)ので、この機会にRuby2.4.0へのリファクタリングも済ませてしまうと良いでしょう。
タスクが完了するまで継続的にブログも更新します。
以上です。
0 件のコメント:
コメントを投稿